【发布时间】:2017-11-21 21:51:12
【问题描述】:
char * removeChar(char * str, char c){
int len = strlen(str);
int i = 0;
int j = 0;
char * copy = malloc(sizeof(char) * (len + 1));
while(i < len){
if(str[i] != c){
copy[j] = str[i];
j++;
i++;
}else{
i++;
}
}
if(strcmp(copy, str) != 0){
strcpy(str,copy);
}else{
printf("Error");
}
return copy;
}
int main(int argc, char * argv[]){
char str[] = "Input string";
char * input;
input = removeChar(str,'g');
printf("%s\n", input);
free(input);
return 0;
}
我不知道为什么每次我尝试运行它时,它总是说未初始化的变量并粘在 strcpy 行和 printf 行。
基本上这个函数是获取一个字符串和一个字符,然后从字符串中删除那个字符(因为我正在学习malloc,所以我写了这样的函数)。
【问题讨论】:
-
在我看来,
if(strcmp(copy, str) != 0)块结束后至少缺少两行代码。请添加它们。 (您可以编辑您的问题 - 看到方框中蓝色“c”下方的灰色小字“编辑”?那是一个按钮。是的,真的。) -
我想你忘记将字符串的最后一个字节设置为
NUL(\0)。 -
我没有收到该警告,但收到了不同的警告 ~ 警告 C4715:'removeChar':并非所有控制路径都返回值。但是看到我必须添加一个缺失的
},也许我把它放错了地方。 -
我也没有收到任何未初始化的变量警告。这段代码有几个地方我不会那样做,缺少几行是个问题,但我看到的唯一实际 bug 是 Alexander 和 Krom 指出的那个。
-
@Nina Liu 函数没有意义。在问题中描述您要达到的目标。
标签: c string function malloc strcpy