1

我正在研究 K&R,我试图编写一个程序来打印所有大于 80 个字符的输入行。一旦我从终端自己运行程序,我什么也得不到。谁能告诉我哪里出错了?还有一个我不确定的部分是这条线s[i] = '\0';- 有人可以向我解释一下这是做什么的吗?

#include <stdio.h>
#define MAXLINE 1000
#define LENGTH 80

int get_line(char line[], int maxline);

/* program to print all lines longer than 80 characters */
main()
{
    int len;    /*current line length*/
    char line[MAXLINE]; /*current input line*/

    while((len = get_line(line, MAXLINE)) > 0)  /*while length of the line is greater than zero*/
            if (len > LENGTH) { /*if the length is greater than 80*/
                    printf("%s", line); /*print that line*/
                    return 0;               
            }
}

/* getline: read a line into s, return length */
int get_line(char s[], int lim)
{
    int c, i;

        for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) /*if i is < 1000 & input is = EOF & input is != newline add one*/
            s[i] = c;   /*assign a value to each character*/
    if (c == '\n') {                            
            s[i] = c;
            ++i;
    }
    s[i] = '\0';    /*unsure what '\0' does*/               
    return i;   /*return the length*/
}
4

2 回答 2

2

我在您的代码中看到的唯一问题是它在打印第一行后立即停止,发现超过 80 个字符。

如果你移动

return 0;

在 if 语句之外,它将打印超过 80 个字符的所有行,而不仅仅是第一行。

您的“主要”方法将是

main()
{
    int len;                                /*current line length*/
    char line[MAXLINE];                         /*current input line*/

    while((len = get_line(line, MAXLINE)) > 0)              /*while length of the line is greater than zero*/
            if (len > LENGTH)                    /*if the length is greater than 80*/
                    printf("%s", line);                 /*print that line*/

    return 0;
}

正如其他人所指出的,'\0' 字符是 C 字符串终止符。

于 2012-08-23T20:02:54.877 回答
1

线

s[i] = '\0';

将 nul 终止符附加到字符串。那是指示字符串结尾的C-ism。

至于你的问题,这个程序对我来说很好用。

$ cat line80.c | ./line80
  while((len = get_line(line, MAXLINE)) > 0)              /*while length of the line is greater than zero*/

$ ./line80 < line80.c
  while((len = get_line(line, MAXLINE)) > 0)              /*while length of the line is greater than zero*/
于 2012-08-23T19:50:16.513 回答