重置变量:分段错误

Resetting Variable : Segmentation fault

当我读取新的换行符时,我试图将变量 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 != '[=11=]') && (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] = '[=11=]';
 printf("%s\n", modifiedString);

这个:

while ((currentChar != '[=10=]') && (i < (length - 1)))

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

它应该是:

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

currentChar 到达字符串的终止符时,或者 i 超过 length-less-one 时,false 将被评估为

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

祝你好运