变量'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("\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等)来分配运行时已知的大小。