Заполненный массив пуст - прерывание ловушки: 6

У меня есть один длинный массив, и я пытаюсь понять, как разделить его на два отдельных массива, второй массив имеет правильное содержимое, но первый пуст, я также получаю ловушку прерывания: 6 и я м не уверен, что это значит.

У меня есть массив с именем integerA, который выглядит примерно так:

HELLO:WORLD, я хочу поместить HELLO в отдельный массив (firstA) и WORLD во второйA. Когда я печатаю первый и второй массивы в конце, 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);

person j.Doie    schedule 18.02.2019    source источник
comment
Вы должны предоставить минимально воспроизводимый пример, если хотите получить хорошие отзывы. Прямо сейчас мы даже не можем видеть, что вы печатаете (я печатаю первый и второй массивы в конце).   -  person Tim Randall    schedule 18.02.2019
comment
entireA[entireVar] != ':' - массив содержит только '\0, так что это будет зацикливаться навсегда, и произойдет неопределенное поведение. Как определяется ARRSIZE?   -  person KamilCuk    schedule 18.02.2019
comment
Если entireA не содержит à \n, это хорошо кончится. Пожалуйста, покажите минимальный воспроизводимый пример, иначе мы не сможем рассказать вам больше.   -  person Jabberwocky    schedule 18.02.2019
comment
@KamilCuk в данных теста есть двоеточие. Хотя было бы намного понятнее, если бы мы могли видеть код   -  person Tim Randall    schedule 18.02.2019
comment
Я исправил пример, теперь он содержит как ':', так и '\n' и показывает, что я печатаю.   -  person j.Doie    schedule 18.02.2019
comment
Вам нужно показать минимально воспроизводимый пример ‹‹‹ – нажмите здесь.   -  person Jabberwocky    schedule 18.02.2019
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что ОП не предоставит минимальный полный и проверяемый пример.   -  person Jabberwocky    schedule 18.02.2019
comment
Кажется, что почти каждая ловушка прерывания 6, которую я вижу, вызвана списанием конца массива. Или... Ваш env. такое, что вы не можете получить 30000 символов данных из системы?   -  person Michael Dorgan    schedule 19.02.2019


Ответы (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 символов и посмотреть, изменит ли это ваши результаты.

person Tim Randall    schedule 18.02.2019