在下面使用printf()语句的代码中,我得到一个分段错误:11。如果没有它,我不会得到任何错误,但我想能够看到正确的值在newstring值中。我该怎么做?

  char* newstring;
  for(int i = 0; i < len; i++)
  {
    printf("value %d\n", tempfullstring[i]);
    if (tempfullstring[i]>=97 && tempfullstring[i] <=122)
    {
      char value = tempfullstring[i];
      newstring += value;
    }
  }
  printf("The new string is %s", newstrng);
  return 0;

最佳答案

我认为你对C字符串的工作方式有误解:
它们不会在声明时初始化(因此必须单独分配char* newstring;,否则会得到未定义的行为)
它们不能与+=运算符连接(因此newstring += value;无效)
C字符串的空间需要显式管理(因此,您需要在自动存储区域中分配newstring,或者在末尾添加free)。
修复程序最简单的方法是猜测newstring要多长时间,并使用strcat向它追加数据:

char newstring[1000]; // some max length
newstring[0] = '\0';  // make it an empty string
...
strcat(newstring, value); // instead of newstring += value

关于c - C打印时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14964246/

10-12 23:29