【发布时间】:2011-07-24 09:48:13
【问题描述】:
我正在编写一个函数,它从用户那里获取一个输入字符串,直到遇到换行符,然后将字符串解析为每个单词并将它们放入一个数组中。
我遇到的问题是,当您第一次启动程序时,如果您输入空格作为输入,则会出现分段错误。如果你放别的东西,它运行良好。然后,如果您之后只输入空格作为输入,它也可以正常运行。
这是函数的sn-p:
#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 上运行带有 MSYS 的 MinGW。 当我通过 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 不熟悉,所以我不知道还要检查什么
【问题讨论】:
标签: c pointers segmentation-fault