【问题标题】:Filled Array is Empty - Abort Trap:6填充数组为空 - 中止陷阱:6
【发布时间】:2019-07-12 05:08:30
【问题描述】:

我有一个长数组,我试图弄清楚如何将其拆分为两个单独的数组,第二个数组具有正确的内容但第一个是空的,我还得到了一个 Abort Trap:6我不确定那是什么意思。

我有一个名为 wholeA 的数组,它看起来像这样:

HELLO:WORLD,我想把 HELLO 放在一个单独的数组(firstA)中,把 WORLD 放在 secondA 中。当我在最后打印第一个和第二个数组时, secondA 具有正确的内容,但是尽管我正在打印以检查是否传递了正确的字符并且它们是正确的字符,但 firstA 并没有发生事件——但是 firstA 仍然是空的,我'正在获取和中止我不明白的陷阱。

刚开始学C,为什么第一个数组是空的,报错是什么意思?

#define ARRSIZE 10000

char entireA[ARRSIZE] = "";
char firstA[ARRSIZE]  = "";
char secondA[ARRSIZE] = "";

strcpy(entireA,"HELLO:WORLD\n");

    int firstVar = 0;
    int entireVar = 0;
    while(entireA[entireVar] !=  ':') {
        if(entireA[entireVar] == ';') {
            break;
        }
        printf("%c \n",entireA[entireVar]);
            firstA[firstVar] = entireA[entireVar];
            firstVar++;
            entireVar++;
    }
    firstA[firstVar] = '\0';

    int secondVar = 0;
    entireVar++; //skip ':'
    while(entireA[entireVar] !=  '\n') {
            secondA[secondVar] = entireA[entireVar];
            secondVar++;
            entireVar++;
    }
    secondA[secondVar] = '\0';

printf("%s", firstA);
printf("%s", secondA);

【问题讨论】:

  • 如果您需要良好的反馈,您应该提供minimal reproducible example。现在,我们甚至看不到您在打印什么(“我在末尾打印第一个和第二个数组”)。
  • entireA[entireVar] != ':' - 数组只包含 '\0 所以这将永远循环并且会发生未定义的行为。 ARRSIZE 是如何定义的?
  • 如果 entireA 不包含 à \n,它会很好地结束。请显示àminimal reproducible example,否则我们无法告诉您更多信息。
  • @KamilCuk “测试数据”中有一个冒号。 如果我们能看到代码会更清楚虽然
  • 我修复了这个例子,它现在同时包含 ':' 和 '\n' 并显示我正在打印的内容。

标签: c arrays abort


【解决方案1】:

您发布的代码没有任何问题。

执行后,变量的值如下:

entireA 0x02efcdb4 "HELLO:WORLD\n"  char[0x00002710]
entireVar   0x0000000b  int
firstA  0x02efa69c "HELLO"  char[0x00002710]
firstVar    0x00000005  int
secondA 0x02ef7f84 "WORLD"  char[0x00002710]
secondVar   0x00000005  int

无论您的问题是什么,这很可能与您的环境有关。我建议将 ARRSIZE 的值减少到 80 个字符,然后看看这是否会改变您的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多