演習5-6 K&R プログラミング言語C

演習5-6

これまでに作った各関数をポインタを使って書き直す。

getline

#include <stdio.h>

#define MAXLINE 1024

int getline(char*, int);

int main(void)
{
    char line[MAXLINE];
    int l, m;

    l = getline(line, MAXLINE);
    printf("\"%s\"'s length => %d\n", line, l);

    m = getline2(line, MAXLINE);
    printf("\"%s\"'s length => %d\n", line, m);

    return 0;
}

int getline(char *s, int lim)
{
    int c, t;

    t = lim;
    while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
        *s++ = c;
    if (c == '\n')
        *s++ = c;
    *s = '
#include <stdio.h>

#define MAXLINE 1024

int getline(char*, int);

int main(void)
{
    char line[MAXLINE];
    int l, m;

    l = getline(line, MAXLINE);
    printf("\"%s\"'s length => %d\n", line, l);

    m = getline2(line, MAXLINE);
    printf("\"%s\"'s length => %d\n", line, m);

    return 0;
}

int getline(char *s, int lim)
{
    int c, t;

    t = lim;
    while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
        *s++ = c;
    if (c == '\n')
        *s++ = c;
    *s = '\0';
    return t - lim;
}
'
; return t - lim; }

実行結果

$ cat hoge.txt
hello
$ ./getline <hoge.txt
"hello
"'s length => 6

atoi

#include <stdio.h>
#include <ctype.h>

int atoi(char*);

int main(void)
{
    char *s = "1280";
    char *t = "-324";

    printf("%s/2 => %d\n", s, atoi(s) / 2);
    printf("%s*2 => %d\n", t, atoi(t) * 2);

    return 0;
}

int atoi(char *s)
{
    int n = 0;
    int sign;

    while (isspace(*s)) /* 空白を飛ばす */
        s++;

    sign = *s == '-' ? -1 : 1;
    if (*s == '-' || *s == '+') /* 符号を飛ばす */
        s++;

    while (isdigit(*s))
        n = 10 * n + (*s++ - '0');

    return sign * n;
}

実行結果

$ ./atoi
1280/2 => 640
-324*2 => -648

itoa, reverse

実行結果

以下の itoa はローカルのポインタ変数を返しているので正常に動作しない。

strindex

実行結果

getop

プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»