问题描述
我尝试过查找,每个答案似乎都有完全不同的答案。
我有这个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("\nAccepted\n");
else
printf("\nRejected\n");
} //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
等)来分配运行时已知的大小。