2013年8月5日月曜日

C - 文字ポインタと関数 (プログラムを配列の添字ではなくポインタで書き直す(getline, copy))

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第5章(ポインタと配列)、5.3(ポインタと配列)、5.4(アドレス計算)、5.5(文字ポインタと関数)、演習5-6(p.36 第1章のgetline、copy)を解いてみる。

その他参考書籍

演習 5-6.(第1章のgetline、copy)

コード

sample.c

#include <stdio.h>
#define MAXLINE 1000

int my_getline(char *, int);
void copy(char *, char *);

int main()
{
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];
    
    max = 0;
    while ((len = my_getline(line, MAXLINE)) > 0) {
        if (len > max) {
            max = len;
            copy(longest, line);
        }
    }
    if (max > 0) {
        printf("%s", longest);
    }
    
    return 0;
}

/* 第1章のgetlineのポインタ版 */
int my_getline(char *s, int lim)
{
    int c;
    char *t = s;
    
    for (--lim; lim > 0  && (c = getchar()) != EOF && c != '\n'; --lim) {
        *s = c;
        s++;
    }
    if (c == '\n') {
        *s = c;
        s++;
    }
    *s = '\0';
    return s - t;
}

void copy(char *to, char *from)
{
    while ((*to = *from) != '\0') {
        to++;
        from++;
    }
}

入出力結果(Terminal)

$ ./a.out < sample.c
    for (--lim; lim > 0  && (c = getchar()) != EOF && c != '\n'; --lim) {
$

0 コメント:

コメントを投稿