首页 > 解决方案 > C:找到最长的线

问题描述

这是 Dennis Ritchie 和 Brian Kernighan 所著的 The C Programming Language 一书(第二版)中的一个示例程序。我的问题是,如果我们传递的是值(变量行)而不是函数长度的引用,那么变化如何反映在主函数中?

#include <stdio.h>
#define MAXLINE 1000

int length(char s[], int lim);
void copy(char to[], char from[]);

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

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

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

    return 0;
}

int length(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

解决方案


这个定义:

int length(char s[], int lim)

可以改写为:

int length(char *s, int lim)

这可能更容易理解。我们不是按值传递变量,而是传递指针,因此函数可以访问数据并在必要时对其进行修改。


推荐阅读