Я пишу функцию, которая принимает строку ввода от пользователя, пока не будет нажата новая строка, затем анализирует строку в каждом слове и помещает их в массив.
Проблема, которую я получаю, заключается в том, что при первом запуске программы, если вы вводите пробел в качестве ввода, она получает ошибку сегментации. Если вы вставите что-нибудь еще, все будет хорошо. Затем, если после этого вы введете только пробел, он тоже будет работать нормально.
Вот фрагмент функции:
#define MAXARGS 10
char buf[100];
char cmd[MAXARGS][100];
char *bp = NULL;
int i, n;
for (i = 0; i < MAXARGS; i++)
strcpy(cmd[i], "");
fputs(" >> ", stdout);
fgets(buf, sizeof(buf), stdin);
bp = buf;
for (i = 0; i < MAXARGS; i++)
{
sscanf(bp, "%99s%n", cmd[i], &n);
bp += n;
while (*bp == ' ') // segfault is here
bp += 1;
}
Я работаю в Windows с MinGW и MSYS.
Когда я запускаю его через GDB, я получаю:
Program received signal SIGSEGV, Segmentation fault.
0x0040152d in command () at main.c:46
46 while (*bp == ' ')
(gdb) print bp
$1 = 0x47291c <Address 0x47291c out of bounds>
(gdb) print *bp
Cannot access memory at address 0x47291c
... но я не знаком с GDB, поэтому не знаю, что еще проверить