我的代码中有一个需要分析的运行时错误
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;
我正在学习 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
中的循环之后使用
abc[NUM_ABC_LET] = '[=12=]';
此外,由于 @BLUEPIXY strcat
要求其参数均为字符串 (char*
),但您传递了 char*
和 char
这会导致事情变得一团糟,因为它会调用未定义的行为。所以,替换
strcat(abc, letter);
类似
abc[letter - 'a'] = letter;