Язык - C. У меня есть массив типов char * (char * array []/char ** array) как аргумент функции, и я хочу напечатать их все, чтобы разделить строки следующим образом:printf сбой после успешной печати
while (*array) {
printf("%s\n", *array);
printf("after last print");
array++;
}
Теперь по какой-то причине, с определенным входом, ему удается распечатать все значения, но сразу же после сбоя последнего массива будет аварийно завершен. Поэтому после последнего printf он больше не печатает «после последней печати». К сожалению, я на Windows 7 с поддержкой netbeans C, без gdb. Были проблемы, когда я пытался установить его в netbeans, но это еще одна история.
Прежде всего, что может быть причиной этого? Во-вторых, как я мог без gdb лучше отладить это поведение? Если вы дадите ответ, который поможет мне отладить проблему, и таким образом ее решить, я также предоставил вам очки. Некоторая справочная информация, связанная с аргументом функции, которая вызывает сбой: я использовал strtok для генерации char ** arr из char * string, где в качестве разделителя использовалось пространство.
EDIT:
Некоторые больше информации: Если я внутри той же функции попытаться PRINTF последний * массив, он отлично работает, и программа продолжает нормально. Так что это работает:
printf("%s\n", array[4]);
Последний индекс до NULL в моем тестовом случае 4. Но тогда, когда то же самое происходит внутри цикла, как и раньше, ему удаётся распечатать его, но он сразу же сбой, а не печать второй строки.
Вероятно, последний элемент массива не задан с помощью указателя «NULL». Вам понадобится нечто вроде 'array [n] = NULL;', где 'n' - количество строк. Разумеется, для '' aray' потребуется комната для элементов 'n + 1'. –