gpt4 book ai didi

c - printf ("%s",pch) VS. while(printf ("%c"pch[i]))?

转载 作者:行者123 更新时间:2023-11-30 18:32:10 24 4
gpt4 key购买 nike

我有一个字符串:“这是一个简单的字符串”

我的目标是找到(使用strstr)“simple”并将其替换为“sample”。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (int argc, char *argv[]){
char *str;
char *pch;

int i=0;

if((str=malloc(BUFSIZ))==NULL){
printf("\n\t MEMORY ERROR");
exit(1);
}
if((pch=malloc(BUFSIZ))==NULL){
printf("\n\t MEMORY ERROR");
exit(1);
}
str="This is a simple string ";
pch=str;
while(str[i]!='\0'){
printf("%c",str[i]);
i++;
}
printf(" -1break\n");

while((*pch!='\0')){
printf("%c",*pch);
pch++;
}
printf(" -2break\n");

printf("%s %d %d %d %d\n",str,strlen(str),sizeof(*str),BUFSIZ,(BUFSIZ-strlen(str)));/*OK*/

if((pch=strstr(str,"simple"))!=NULL){
printf("%s \n",pch); **/*OK*/**
while((*pch!='\0')){
printf("%c",*pch);
pch++;
} **/*SEG FAULT*/**
strncpy(pch,"sample",6);
printf("OK\n");
}
printf("%s %d\n",str,strlen(str));
printf("\n");
return 0;
}

输出:

$ ./strstr

This is a simple string -1break

This is a simple string -2break

This is a simple string 24 1 8192 8168

simple string

Segmentation fault

$

问题:

无法将“简单”替换为“示例”。

问题:

如果pch正确指向“simple”的's',为什么不能strncpy替换“sample”的6个字母?

最佳答案

作为摘要您的 str指针应该指向读/写内存区域,例如用 malloc 分配的内存。/calloc/realloc或静态字符数组,如 char str[50]char str[] = "simple string";

char *str = "simple string" , str这里指向一个文字字符串。并且文字字符串存储在只读内存区域中,因此您无法编辑它

代码批评家:

1)首先下面这行是错误的

str="This is a simple string ";

你已经为str分配了一 block 内存,但你没有使用它,你已经改变了指针。指针现在指向文字字符串(常量字符串),而不是其原始内存区域(使用 malloc 分配)。应该是:

strcpy(str,"This is a simple string ");

同样

pch = str;

pch指向 str 相同的文字字符串

pch=strstr(str,"simple")

pch这里也指向一个文字字符串,因为 str是字面上的刺

2)下面这行是错误的

strncpy(pch,"sample",6);

pch指向文字字符串并复制到指向文字字符串的指针是未定义的行为,这会导致崩溃

代码已修复:

int main (int argc, char *argv[]){
char *str;
char *pch;

int i=0;

if((str=malloc(BUFSIZ))==NULL){
printf("\n\t MEMORY ERROR");
exit(1);
}

strcpy (str, "This is a simple string ");
if((pch=strstr(str,"simple"))!=NULL) {
strncpy(pch,"sample",6);
}
printf("%s\n", str);
}

关于c - printf ("%s",pch) VS. while(printf ("%c"pch[i]))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16280025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com