我是C编程的新手.我正在尝试制作一个需要一些简单输入的程序.但是我发现,在将输入字符串与用户"意味着"输入的内容进行比较时,最后会有一个额外的字符.我认为这可能是'\ 0'或'\ r',但似乎并非如此.这是我的代码片段:
char* getUserInput(char* command, char $MYPATH[])
{
printf("myshell$ ");
fgets(command, 200, stdin);
printf("%u\n", (unsigned)strlen(command));
if ((command[(unsigned)strlen(command) - 1] == '\0') || (command[(unsigned)strlen(command) - 1] == '\r'))
{
printf("bye\n");
}
return command;
}
Run Code Online (Sandbox Code Playgroud)
代码显示输入时,说"退出"输入5个字符.但是,我似乎无法弄清楚最后一个的身份."再见"从不打印.有谁知道这个神秘人物会是什么?
神奇的第五元素很可能是换行符: \n
从man fgets()(我强调):
fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中.读数在EOF或换行符后停止. 如果读取换行符,则将其存储到缓冲区中.在缓冲区中的最后一个字符之后 存储'\ 0' .
为了证明这个打印出来的每个字符读取:
char* getUserInput(char* command, char $MYPATH[])
{
printf("myshell$ ");
fgets(command, 200, stdin);
printf("%u\n", (unsigned)strlen(command));
{
size_t i = 0, len = strlen(command);
for (;i < len; ++i)
{
fprintf(stderr, "command[%zu]='%c' (%hhd or 0x%hhx)\n", i, command[i], command[i], command[i]);
}
}
...
Run Code Online (Sandbox Code Playgroud)