【发布时间】:2020-02-14 12:04:53
【问题描述】:
我正在创建一个简单版本的 Minix。我正在使用fgets() 来获取用户输入。然后我使用strtok() 将字符串与分隔符" " 分开。问题是当我调用strtok(NULL, " ") 时,我存储的令牌会在最后一个字符后面附加一个空格。因此,如果我通过"minimount imagefile.img",我的程序将抓取minimount 并将其存储在变量cmd 中,然后它将抓取"imagefile.img " 并将其放入变量flag。注意flag变量末尾的空格是在token方法之后添加的。
在调用令牌后,有没有办法让我只抓取末尾没有空格的字符串。或者有没有办法操纵字符串以删除附加的空间?
printf("Minix: ");
fgets(cmd, BUFFLIM, stdin);
//parses string using delimiter " "
char *token = strtok(cmd, " ");
//assigns flag to what is after delimiter
char *f = strtok(NULL, " ");
//printf("cmd:%s\nf:%s\n", cmd, f);
printf("cmd:%s\nf:%s", cmd, f);
输出:
cmd:"minimount"
f:"imagefile.img "
【问题讨论】:
-
它可能不是真正的空格,而是
fgets()添加到缓冲区的换行符。您必须手动删除此换行符。 -
这看起来可能是一个错误。
strtok()is supposed to terminate that second token。请提供一个完整的示例 -
您在
flag变量周围引用的输出带有"与代码不匹配 - 代码具有f而不是flag并且不打印任何双引号。这让我们想知道什么是什么 - 您需要确保您的代码与您的问题匹配。
标签: c fgets strtok minix string.h