重置变量:分段错误

时间:2015-01-19 21:34:32

标签: c segmentation-fault removing-whitespace

当我读取新换行符时,我试图将变量foundAlphaNum重置为0,但是当我执行foundalphanum = 0时,它会给我一个分段错误。我该如何解决这个问题?

在函数中:

  void removechar ( char *stringInput, size_t length)

  unsigned int i = 0;
  char *currentChar = stringInput;
  char modifiedString[length];
  int foundAlphaNum = 0;

  while ((currentChar != '\0') && (i < (length - 1)))
  {

      if (isalnum(*currentChar))
      {
          foundAlphaNum = 1;
      }

      if (*currentChar != ' ' && *currentChar != '\t' && *currentChar !='\n' && foundAlphaNum)
      {
          modifiedString[i] = *currentChar;
          i++;
      }
      else if ((*currentChar == ' ' || *currentChar == '\t') && !foundAlphaNum)
      {
          modifiedString[i] = *currentChar;
          i++;
      }
      else if(*currentChar == '\n')
       {
         modifiedString[i] = *currentChar;
         i++;
         foundAlphaNum = 0;
       }

     currentChar++;

 }

 // add null terminating char (maybe...)
 modifiedString[i] = '\0';
 printf("%s\n", modifiedString);

1 个答案:

答案 0 :(得分:1)

此:

while ((currentChar != '\0') && (i < (length - 1)))

错了。 currentChar是指向缓冲区的指针。它不应该是NULL 永远,因此使您的第一次测试毫无意义。

应该是:

while (*currentChar && (i < (length - 1)))

false落在字符串的终结符上时,将currentChar评估,或i超过length - 少于一。

注意:我没有尽职调查代码的 rest ,但这显然很糟糕。值得注意的是,在进入此循环之前,应验证stringInputlength。相信我,当length-1length为零时,您不希望行走size_t,也不想在开始时取消引用NULL指针。

祝你好运