无法确定字符串末尾的字符值

Dan*_*ner 2 c string

我是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个字符.但是,我似乎无法弄清楚最后一个的身份."再见"从不打印.有谁知道这个神秘人物会是什么?

alk*_*alk 9

神奇的第五元素很可能是换行符: \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)

  • 发布唯一正确答案的+1.有趣的是,每个人都在喋喋不休地谈论strlen之后突然编辑了他们的答案:) (2认同)