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

Stack around the variable 'userStr' was corrupted (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只能保存一个值;包括终结者。您没有指定大小,所以它查看了 {} 中的内容。那里只有一个元素,所以这就是它使用的大小。将数组的末尾写到它之后的内存中会破坏堆栈(因为它保存着重要的东西,比如 return 地址和其他数据)。

指定大小以允许它容纳更多:

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

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