【问题标题】:i have a runtime error in my code that i need to analyse我的代码中有一个运行时错误需要分析
【发布时间】:2016-03-16 15:32:27
【问题描述】:

我正在学习 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);
    }
}

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

【问题讨论】:

  • 1) strcat 将向参数请求 char*。 (strncat(abc, &amp;letter, 1); 而不是。) 2) char abcString[NUM_ABC_LET] = ""; --> char abcString[NUM_ABC_LET+1] = ""; : +1 表示空终止。

标签: c crash runtime


【解决方案1】:

您需要为 26 个字母 + 1 个 NUL 终止符('\0')保留空间。

所以改变

char abcString[NUM_ABC_LET] = "";

char abcString[NUM_ABC_LET + 1] = "";

并在 makeABC 的循环之后使用 NUL 终止它

abc[NUM_ABC_LET] = '\0';

另外,作为@BLUEPIXYhas mentioned in the commentsstrcat 要求它的两个参数都是字符串(char*),但是你传递了一个char* 和一个char,这会导致事情变得一团糟调用未定义的行为。所以,替换

strcat(abc, letter);

类似的东西

abc[letter - 'a'] = letter;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多