我是C的新手,我遇到指针问题。我看过导游并且(至少尝试过)遵循他们的建议,但仍然无法让我的代码工作。
我有driver.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 *suffix) {
char *result = strcpy(result, prefix);
result = strcat(result, suffix);
return result;
}
当我接到这个电话时,我不断收到“Segmentation fault(core dumped)”,并且无法弄清楚如何解决它。我已经尝试了带前缀和后缀的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);
}
并且helper.c是
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”打印的核心转储。
答案 0 :(得分:1)
您正在写一个未分配的内存空间,您应该使用malloc:
进行分配char *result = malloc(sizeof(*result) * (strlen(prefix) + strlen(suffix) + 1))
答案 1 :(得分:0)
char *result = strcpy(result, prefix);
该行将显示未定义的行为。您尚未为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
添加到命令行。