以下代码始终存在段错误:

  char *test3 = (char *) malloc(sizeof(char) * 5);
  test3 = "asdf";
  printf("%s\n", test3);


以下代码不分段:

  char *test3 = (char *) malloc(sizeof(char) * 5);
  test3[0] = 'a';
  test3[1] = 'b';
  test3[2] = 'c';
  test3[3] = 'd';
  test3[4] = '\0';
  printf("%s\n", test3);


我猜问题可能是如何将cstring文字分配给动态创建的cstring?

最佳答案

“填充”字符串的正确方法是:

 strcpy(test3, "abcd");


但是,我强烈建议您不要使用malloc [并且绝对不要使用(char *) malloc(...)-因为那样可以隐藏一些相当讨厌的错误,它们会跳起来并至少在适当的时候咬住您,因为这些错误的确有这样做的趋势-您之所以这样做,是因为您将C代码编译为C ++代码,这是错误的,并且会教您这样的坏习惯。

使用malloc分配小字符串会浪费大量空间。您的5个字符串的开销可能为16-32字节,并将四舍五入为8或16个字节。因此,总共可能要使用48个字节来存储5个字节-这是巨大的空间浪费。

关于c - 使用malloc在C中正确使用/创建动态cstring?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18115517/

10-11 16:38