这是一个用字符串中的给定字符串替换所有子字符串的程序。但是它显示了分段错误..帮助..
char s[1000]="i am a good boy,he is a good boy";
char rep[100]="good";
char new[100]="bad";
char result[1000];
char *tmp;
int len;
char *k=s;
while(1)
{
tmp=strstr(k,rep);
if(tmp==NULL)
break;
len=tmp-k;
tmp=tmp+strlen(rep);
strncpy(result,k,len);
strcat(result,new);
k=k+len+strlen(rep);
}
strcat(result,tmp);
puts(result);
答案 0 :(得分:2)
您的代码使用strncpy()
但不会终止字符串,然后使用strcat()
附加到非终止字符串。这不是一个好主意。
您的代码总是在每次迭代时复制到result
的{开头},丢弃在上一次迭代中复制的任何内容。这也不是一个好主意。
您的代码也会提交' clbuttic'匹配和替换部分词语的错误(所以'商品' - 如同货物列车' - 如果代码有效,将成为“坏事”。
答案 1 :(得分:1)
memcpy版本。
char *s="i am a good boy,he is a good boy";
char *rep="good";
char *new_word="bad";
char result[1000];
char *tmp;
int r_len= strlen(rep);
int n_len= strlen(new_word);
char *k=s;
char *r=result;
while(1){
if(NULL==(tmp=strstr(k,rep))){
memcpy(r, k, strchr(k, '\0') - k + 1);
break;
}
r = (char*)memcpy(r, k, tmp - k) + (tmp - k);
r = (char*)memcpy(r, new_word, n_len) + n_len;
k = tmp + r_len;
}
puts(result);
答案 2 :(得分:0)
结帐这个:
void main()
{
char s[1000]="i am a good boy,he is a good boy";
char rep[100]="good";
char newstr[100]="bad";
char result[1000] = "";
char *tmp;
int len;
char *k=s;
char *res = result;
while(1)
{
tmp=strstr(k,rep);
if(tmp==NULL)
break;
len=tmp-k;
tmp=tmp+strlen(rep);
strncpy(res,k,len);
strcat(res,newstr);
res += len + strlen(newstr);
k=k+len+strlen(rep);
}
if(!tmp)
strcat(result,k);
puts(result);
}
一些注意事项:
1)new是一个关键字,你不能像这样命名变量
2)你应该使用""来初始化结果字符,这样你就可以正确地对它进行strcat' int
3)你应该检测到strcat结果的位置(用char * res指针完成)