我一直在试图弄清楚为什么它不打印出测试信息并进入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
答案 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
,这就是这个功能的工作方式。