将字符串传递到函数并在C中修改(指针有问题)
我是C语言的新手,在指针方面有困难。我已经看过指南,并且(至少尝试过)遵循了他们的建议,但仍然无法让我的代码正常工作 我有司机。c:将字符串传递到函数并在C中修改(指针有问题),c,malloc,C,Malloc,我是C语言的新手,在指针方面有困难。我已经看过指南,并且(至少尝试过)遵循了他们的建议,但仍然无法让我的代码正常工作 我有司机。c: int main(int argc, char *argv[]) { char *prefix = "p", *suffix = "aa"; char *result; result = formResult(prefix, suffix); } 在helper.c中: char* formResult(char *prefix, char *su
int main(int argc, char *argv[]) {
char *prefix = "p", *suffix = "aa";
char *result;
result = formResult(prefix, suffix);
}
在helper.c中:
char* formResult(char *prefix, char *suffix) {
char *result = strcpy(result, prefix);
result = strcat(result, suffix);
return result;
}
当我接到这个电话时,我总是会遇到“分段错误(核心转储)”,但我不知道如何解决它。我试过使用带有前缀和后缀的malloc,但这也不起作用(尽管我可能做得不对)
谢谢
编辑:
我已将driver.c更新为
int main(int argc, char *argv[]) {
char *prefix = malloc(15), *suffix = malloc(15);
prefix = strcpy(prefix, "p");
suffix = strcpy(suffix, "aa");
char *result = malloc(30);
printf("step0");
result = formResult(prefix, suffix);
}
char* formResult(char *prefix, char *suffix) {
printf("step1");
char *result = malloc(strlen(prefix) + strlen(suffix) + 1);
result = strcpy(result, prefix);
result = strcat(result, suffix);
return result;
}
和helper.c
int main(int argc, char *argv[]) {
char *prefix = malloc(15), *suffix = malloc(15);
prefix = strcpy(prefix, "p");
suffix = strcpy(suffix, "aa");
char *result = malloc(30);
printf("step0");
result = formResult(prefix, suffix);
}
char* formResult(char *prefix, char *suffix) {
printf("step1");
char *result = malloc(strlen(prefix) + strlen(suffix) + 1);
result = strcpy(result, prefix);
result = strcat(result, suffix);
return result;
}
我可以让“step0”打印,但我仍然可以在没有“step1”打印的情况下获得内核转储。如果在未分配的内存空间中写入,则应使用malloc分配它:
char *result = malloc(sizeof(*result) * (strlen(prefix) + strlen(suffix) + 1))
该行将显示未定义的行为。您尚未为result
分配任何空间。让我们这样做:
char* formResult(char *prefix, char *suffix) {
char *result = malloc(strlen(prefix) + strlen(suffix) + 1);
strcpy(result, prefix);
strcat(result, suffix);
return result;
}
如果您使用的是
gcc
或clang
,我建议您在命令行中添加编译器标志-Wall
。打开编译器警告。不要把人的注意力浪费在机器可以为你做的事情上。我想你的意思是char*prefix=“p”、*suffix=“aa”代码>。实际代码应该给出一个编译错误。不要忽略错误。使用鼠标将整个源文件复制并粘贴到问题输入框。你在浪费每个人的时间。您已经修改了源代码至少两次,完全更改了源代码并使以前的所有注释和答案无效。按原样发布整个可编译程序。确保编译时没有警告。使用-Wall
。让我最后一次尝试帮助你(不一定友好)。是您提交的代码的外观。注意:此代码没有任何带有-Wall
的警告,不显示故障,并显示预期结果。请确保您的代码没有任何带有-Wall
的警告,然后完整发布。如果它确实有警告,而您不知道如何消除它们,请提及。谢谢。我试过你的建议,但我还是有一个核心转储。我用我的编辑更新了Q。我也开始使用-Wall,我没有收到任何与此相关的警告/错误:/