我的代码中有一个需要分析的运行时错误

i have a runtime error in my code that i need to analyse

我正在学习 c 并且我有一道分析题... 我得到了这个代码:

#include <stdio.h>
#include <string.h>

#define NUM_ABC_LET 26
void makeABC(char abc[NUM_ABC_LET]);

int main()
{
   char abcString[NUM_ABC_LET] = "";
   makeABC(abcString);
   puts(abcString);
   return (0);
}

void makeABC(char abc[NUM_ABC_LET])
{
    char letter;
    for(letter = 'a'; letter <= 'z'; letter++)
    {
        strcat(abc, letter);
    }
}

谁能告诉我为什么会一直崩溃?它有什么问题?

您需要为 26 个字母保留 space + 为 NUL 终止符保留 1 个('[=15=]')。

所以改变

char abcString[NUM_ABC_LET] = "";

char abcString[NUM_ABC_LET + 1] = "";

并在 makeABC 中的循环之后使用

以 NUL 终止它
abc[NUM_ABC_LET] = '[=12=]';

此外,由于 @BLUEPIXY strcat 要求其参数均为字符串 (char*),但您传递了 char*char这会导致事情变得一团糟,因为它会调用未定义的行为。所以,替换

strcat(abc, letter);

类似

abc[letter - 'a'] = letter;