为什么这不会进入while循环?

时间:2012-12-11 17:04:49

标签: c while-loop

我一直在试图弄清楚为什么它不打印出测试信息并进入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

2 个答案:

答案 0 :(得分:6)

fgets(tempString, maxLength, stdin);最多读取maxLength-1个字节。有关详细信息,请参阅fgets man page

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

您的意思是使用<作为循环测试吗?

 while ((int)len < maxLength)

答案 1 :(得分:1)

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

Here's a man page for fgets()

  

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

所以在你的代码中:

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

你永远不会阅读maxLength-1,这就是这个功能的工作方式。