一行入力
getline()、getdelim()
#define _GNU_SOURCE #include <stdio.h> ssize_t getline(char **lineptr, size_t *n, FILE *stream); ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
Linuxで使える関数です。
getlineはstreamから一行読み込み、*lineptrに格納します。
必要に応じて勝手に*lineptrを拡張してくれます。自分でバッファを用意するのがめんどくさい人は*lineptrにNULLを入れましょう。
getdelim()は改行以外の区切り文字をdelimに指定できます。
使い方
標準入力から入力されたものを出力します。
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> int main() { FILE *file; char *line; size_t length; file=fopen("/dev/stdin","r"); line=NULL; while (getline(&line,&length,file)!=-1) { printf(line); } free(line); fclose(file); return 0; }
fgetln()
#include <stdio.h> char *fgetln(FILE *stream, size_t *len);
BSD系のOSで使える関数です。
読み込んだ一行を返してくれますが、次の行を読み込んだり、ファイルと閉じたりするとポインタが無効になるので、読み込んだ行を残しておきたい場合は複製する必要があります。また、返ってくる文字はヌル文字で終わっていないので注意が必要です。
使い方
標準入力から入力されたものを出力します。
#include <stdio.h> int main() { FILE *file; char *line; size_t length; file=fopen("/dev/stdin","r"); while ((line=fgetln(file,&length))!=NULL) { int i; for (i=0;i<length;i++) { putchar(line[i]); } } fclose(file); return 0; }