变量周围的堆栈'userStr'已损坏 (C)



我试着查找过,每个人似乎都有完全不同的答案。

我有一个REPL函数,它将用户的字符串输入与确定性有限自动机(DFA(进行比较,并且运行得非常好。

void REPL(DFA userDFA)
{
char userStr[] = {'0'};
printf("nWhat string would you like to use?n");
scanf("%s", userStr);
if (DFA_execute(userDFA, userStr))
printf("nAcceptedn");
else
printf("nRejectedn");
} //program crashes right here
int main(void){...}

然而,一旦它到达函数的末尾,程序就会崩溃,并给我以下错误:

Run-Time Check Failure #2 - Stack around the variable 'userStr' was corrupted.

char userStr[] = {'0'};

这意味着userStr只能保持单个值;包括终止器。您还没有指定大小,所以它会查看您在{}中拥有的内容。你只有一个元素,所以这就是它使用的大小。将数组的末尾写入后面的内存会损坏堆栈(因为它包含重要的内容,如返回地址和其他数据(。

指定允许其容纳更多的尺寸:

char userStr[100] = {'0'};

这给了它一个100长的任意大小。您可能需要给它一个更大的大小,或者使用动态内存分配(malloc等(来分配到运行时已知的大小。

最新更新