将字符串传递给函数并在C中修改(指针有问题)

时间:2014-09-23 22:44:48

标签: c malloc

我是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”打印的核心转储。

2 个答案:

答案 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;
}

如果您使用的是gccclang,我建议您将编译器标记-Wall添加到命令行。