-2

我一直在努力弄清楚为什么它不会打印出测试消息并进入while循环。有任何想法吗?

void getInput(char * string)
{
  char * tempString;
  int maxLength = 1026; // Accounts for NULL and \n.
  tempString = malloc(maxLength * sizeof(char));  

  fgets(tempString, maxLength, stdin);
  size_t len = strlen(tempString);


  while ((int)len > maxLength)
  {  
    printf("Test");
    if (tempString[len-1] == '\n')
    {
      tempString[len-1] = '\0';
      len = strlen(tempString); 
    } // if
  } // while
4

2 回答 2

6

fgets(tempString, maxLength, stdin);最多读取maxLength-1字节。有关详细信息,请参见 fgets手册页

这意味着strlen(tempString)必须始终小于maxLength

你的意思是<用作你的循环测试吗?

 while ((int)len < maxLength)
于 2012-12-11T17:08:01.170 回答
1

由于没有其他人这样做,让我向您介绍手册页。如果您没有基于 Linux 的操作系统,只需在 Google 中输入 man 和函数名称,您就会得到该函数如何工作的描述。

这是 fgets() 的手册页

char *fgets(char *s, int size, FILE *stream);
fgets() 从流中最多读入一个小于 size的字符,并将它们存储到 s 指向的缓冲区中。

所以在你的代码中:

fgets(tempString, maxLength, stdin); // size is maxLength

您将永远不会阅读更多内容maxLength-1,这就是该功能的工作原理。

于 2012-12-11T17:39:18.247 回答