我在C编程中编写了一个代码,试图在字符串中搜索单词并用其他单词替换这些单词。 当它运行时一切似乎都很好,但是在“返回0”行发生错误,并显示消息“线程1:信号SIGABRT”。
我不知道问题所在。有没有人对它有任何想法?
以下是我的代码:
int main(void){
char s1[]="ABCDABCD";
char *s2="BC";
char *s3="xyz";
int ReplaceStr(char *, char *, char *);
char *pps1=s1;
printf("%s\n", s1);
ReplaceStr(pps1, s2, s3);
printf("%s\n", s1);
return 0;
}
int ReplaceStr(char *pps1, char *ps2, char *ps3){
if(pps1==NULL || ps2==NULL || ps3==NULL) return 0;
int n1=strlen(pps1), n2=strlen(ps2), n3=strlen(ps3);
if(!n1 || !n2) return 0;
char *sNext=strstr(pps1, ps2);
char *sNext1=sNext+n2;
if(sNext==NULL) return 0;
int count=0;
char *Tmp=calloc(sizeof(char), strlen(sNext1)+1);;
if(sNext != NULL){
strcpy(Tmp, sNext1);
memcpy(sNext, ps3, n3);
strcpy(sNext+n3, Tmp);
sNext+=strlen(ps3);
count+=ReplaceStr(sNext, ps2, ps3)+1;
}
free(Tmp);
return count;
}
答案 0 :(得分:0)
目前我不确定您为什么会在return 0
末尾的main
行声明错误。您使用的IDE /编译器是什么?
尝试重写您的代码:
int ReplaceStr(char*, char*, char*); // {1}
int main() {
char *s1="ABCDABCD"; // {2}
char *s2="BC";
char *s3="xyz";
char *pps1=s1;
printf("%s\n", s1);
ReplaceStr(pps1, s2, s3);
printf("%s\n", s1);
return 0;
}
int ReplaceStr(char *pps1, char *ps2, char *ps3){
if(pps1==NULL || ps2==NULL || ps3==NULL) return 0;
int n1=strlen(pps1), n2=strlen(ps2), n3=strlen(ps3);
if(!n1 || !n2) return 0;
char *sNext=strstr(pps1, ps2);
char *sNext1=sNext+n2;
if(sNext==NULL) return 0;
int count=0;
char *Tmp= (char*) calloc(sizeof(char), strlen(sNext1)+1); // {3}
if(sNext != NULL){
strcpy(Tmp, sNext1);
memcpy(sNext, ps3, n3);
strcpy(sNext+n3, Tmp);
sNext+=strlen(ps3);
count+=ReplaceStr(sNext, ps2, ps3)+1;
}
free(Tmp);
return count; }
在编辑{1},我在main
之前宣布了您要使用的功能。
在编辑{2}时,我更改了s1[]=""
以保持一致性。这让我很烦恼。
在编辑{3}时,calloc
会返回void*
,因此您必须将其转换为所需的指针类型。