-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

他の誰もやっていなかったので、man ページを紹介させてください。Linux ベースの OS を使用していない場合は、man と関数名を Google に入力するだけで、関数の動作に関する説明が表示されます。

fgets() のマニュアルページは次のとおりです。

char *fgets(char *s, int size, FILE *stream);
fgets() は、stream から最大で size 未満の 1文字を読み取り、s が指すバッファーに格納します。

だからあなたのコードで:

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

これ以上読むことはありませんmaxLength-1。これが関数の仕組みです。

于 2012-12-11T17:39:18.247 に答える