重置变量:分段错误
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,但这显然很糟糕。值得注意的是 stringInput
和 length
都应在进入此循环之前进行验证。相信我,当 length
为 size_t
零时,您不想走 length-1
,也不想在开始时取消引用 NULL
指针。
祝你好运
当我读取新的换行符时,我试图将变量 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,但这显然很糟糕。值得注意的是 stringInput
和 length
都应在进入此循环之前进行验证。相信我,当 length
为 size_t
零时,您不想走 length-1
,也不想在开始时取消引用 NULL
指针。
祝你好运