【发布时间】:2014-06-01 11:20:42
【问题描述】:
我想读取用户输入(如终端),直到写入退出或 ctrl+c/ctrl+d 被按下。我阅读每一行(直到按下返回/输入),检查它是否只是空格或注释(#),然后执行一些函数。
我尝试了三种方法,但都没有成功。每次插入字符串并按 Enter 时都会出错
char line[256];
while(printf("%s>", shell_name) && scanf("%50[^\n]", line) != EOF)
{
分段错误(核心转储)
while(printf("%s>", shell_name) && getline(line, 100, stdin) != EOF)
注意:预期为“size_t * restrict”,但参数的类型为“int”
while(printf("%s>", shell_name) && fgets(line, sizeof(line), stdin) != NULL)
{
分段错误(核心转储)
为了获得更多的指导,我接下来会这样做
if(isspace(&line) == 0 && &line[0] != "#")
我做错了什么?有没有更合适/简单/更好的选择?
【问题讨论】:
-
有趣——我注意到的第一件事是你似乎确信这没关系:
printf("%s", strcat(shell_name, ">")),因为你到处都在使用它。请改用printf("%s>", shell_name)。 -
愚蠢的错误 :) 痴迷于 strcat
-
解决了吗? :D 所以要么
shell_name是一个静态字符串(所以它可能不会被修改),或者strcating 很多字符使它溢出? -
不不,它以前工作过,它打印 mysh> 并等待输入,但是一旦我输入命令并按 Enter,我就会得到分段错误
-
您想要
*line或line[0]而不是&line。请不要忽略编译器警告,尤其是关于类型不匹配的警告。