【问题标题】:Problem in Example 1.9 - The C Programming Language示例 1.9 中的问题 - C 编程语言
【发布时间】:2020-04-08 18:41:54
【问题描述】:

我尝试编译并运行下面的程序,它是 The C Programming Language 一书的示例 1.9。编译OK,没有发现错误。但是,当我运行它并查看程序是否工作时,它不会返回最长的行,而是返回与最长行长度相同的垃圾字符序列。

这是程序:

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

int main()
{
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];

    max = 0;
    while ((len = getline(line, MAXLINE)) > 0) {
        if (len > max) {
            max = len;
            copy(longest, line);
        }
    }

    if (max > 0) {
        printf("%s", longest);
    }
    return 0;
}

int getline(char s[], int lim)
{
    int c, i;

    for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
        s[i] = c;
    }
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}

void copy(char to[], char from[])
{
    int i;

    i = 0;
    while ((to[i] = from[i] != '\0')) {
        ++i;
    }
}

【问题讨论】:

  • 由于编译正常,我编辑了标题。
  • 谢谢,没注意...

标签: c arrays kernighan-and-ritchie


【解决方案1】:

这个表达式:

(to[i] = from[i] != '\0')

没有按照你的想法做。它将首先比较from[i] != '\0',并将结果分配给to[i]。这意味着目标字符串的长度正确,但包含代码为1 的字符。

所以可能你把括号复制到了错误的位置:

(to[i] = from[i]) != '\0'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多