繁体   English   中英

打印时出现C分段故障错误

[英]C Segmentation fault error on print

在下面的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
newstring += value

您正在以非法方式附加到字符串,您实际在做的是更改未初始化的指针, 因此您将更改地址移动到另一个无效地址

首先,您应该有一些空间来存储新的字符串

char newstring[64];

然后通过执行追加角色

newstring[j] = tempfullstring[i];

这不会附加NUL终止字符,您必须手动将其添加到最后或使用不同的方法(例如使用strncat并直接从原始字符串追加:

strncat(newstring+j, tempfullstring+i, 1);

这是你想要使这项工作的代码。

 char* newstring = malloc (sizeof(char)*len+1);   // this will be worst case (all are >=97 o <=122
    int j=0;
      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[j]= value;
          j++;
        }
      }
      newstring[j]='\0';
      printf("The new string is %s", newstrng);
      return 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM