【发布时间】: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' 并显示我正在打印的内容。