我试着查找过,每个人似乎都有完全不同的答案。
我有一个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
等(来分配到运行时已知的大小。