当我读取新换行符时,我试图将变量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);
答案 0 :(得分:1)
此:
while ((currentChar != '\0') && (i < (length - 1)))
错了。 currentChar
是指向缓冲区的指针。它不应该是NULL 永远,因此使您的第一次测试毫无意义。
应该是:
while (*currentChar && (i < (length - 1)))
当false
落在字符串的终结符上时,将currentChar
评估,或i
超过length
- 少于一。
注意:我没有尽职调查代码的 rest ,但这显然很糟糕。值得注意的是,在进入此循环之前,应验证stringInput
和length
。相信我,当length-1
为length
为零时,您不希望行走size_t
,也不想在开始时取消引用NULL
指针。
祝你好运