簡體   English   中英

Kernighan和Ritchie問題1-17的Printf問題

[英]Printf problem with Kernighan and Ritchie problem 1-17

在下面的代碼中(對於Kernighan和Ritchie的“ The C Programming Language”中的問題1-17,為什么它不打印最長的行(在底部)?

#include <stdio.h>
#define MAXLINE 1000
#define LONGLINE 10

int getLineLength(char line[], int maxline){
  int i, c;

  for(i = 0; i< maxline-1 && (c = getchar() != EOF) && c != '\n'; i++)
    line[i] = c;

  if(c == '\n') {
      line[i] = c;
      i++;
  }

  line[i] = '\0';
  return i;
}



main() {
  int len;
  char line[MAXLINE];
  while((len = getLineLength(line, MAXLINE)) > 0)
    if(len > LONGLINE)
      printf("The line was over the maxlength\n\t %s", line);

  return 0;
}

在您的代碼中:

(c = getchar() != EOF)

這將被評估為(c = (getchar() != EOF)) ,給出錯誤的結果。 您需要的是:

((c = getchar()) != EOF)

該程序從標准輸入中讀取,並打印該長消息,以表示比字符長10行的行。 行以“ \\ n”(換行符,ENTER)結尾。 如果通過管道輸入文件,則輸入以EOF結尾;如果手動輸入字符,則輸入以CTRL-C結尾。

我很驚訝這一切都奏效。 (c = getchar() != EOF)一開始是完全錯誤的。 line[i] = c; 出現兩次。 而且我認為它在邊緣情況下很容易發生緩沖區溢出。

編輯:我看不到一個更早的答案,您似乎在for循環中缺少括號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM