大学の課題では、演習でC readline
関数を使用することが提案されました。その参照を検索しましたが、まだ見つかりません。それは本当に存在しますか?どのヘッダーに?参考文献へのリンクを投稿していただけますか?
Readlineは、libreadline
とlibedit
(libeditline
とも呼ばれます)の2つの場所に存在します。どちらも同じインターフェースを持っています。違いは、libreadlineはGPLの下でライセンスされており、libeditは3節BSDです。ライセンスは実際には割り当ての問題ではありません、少なくとも私はそうは思わない。どちらのライセンスでも、コードを自由に使用できます。 readlineに対してリンクする場合は、プログラム全体をGPL 2 or later
にして、システムを管理するGPLのバージョンが何であれreadline
を満たすようにしてください。システムの使用年数に応じて、GPL2 +またはGPL3 +の場合があります。私はどちらのライセンスも支持していません、それはあなた次第です。
/またはのいずれかをインストールし、必要に応じてリンクを調整するように注意してください(-lreadline
または-ledit
または-leditline
)。どちらもライブラリであり、標準Cライブラリの一部ではありません。
編集(後付け):
プログラムを公開する場合は、ユーザーが選択したreadline
を使用してプログラムを構成できるようにするための優れたジェスチャーです。例:--with-readline
または--with-libedit
など。これにより、少なくともreadline
に関する限り、ライセンスの選択に準拠するバイナリパッケージが可能になります。
リンク: Readline および Edit/Editline 。
標準機能ではないと思います。
簡単な実装は次のようになります。
char * Readline(char * in){ char * cptr; if(cptr = fgets(in、MAX_LINE、stdin)){ /* kill空白の前に\ nを残しておくと、何か が保証されますwhile(* cptr == '' || * cptr == '\ t'){ cptr ++; } return cptr; } else { return 0; } }
Fgets()を使用して、最大MAX_LINE-1文字をバッファ 'in'に読み込みます。先行する空白を取り除き、最初の非空白文字へのポインタを返します。
Java-BufferedReaderのreadLine()のような「readLine()」関数が必要な場合は、「line.h」で私の関数"char * get_line(FILE * filePointer)"を自由に使用することもできます。この目的: https://github.com/pheek/line.h/blob/master/line.h
GNU Cライブラリ:ssize_t getline (char **lineptr, size_t *n, FILE *stream)
からこれを読み取ろうとしたかどうかはわかりません。この関数はファイルから行を読み取り、必要に応じてさらに多くのスペースを再割り当てすることもできます。
この例は、getlineのマンページにあります。以下はそのコピーです。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
FILE *stream;
char *line = NULL;
size_t len = 0;
ssize_t nread;
if (argc != 2) {
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
exit(EXIT_FAILURE);
}
stream = fopen(argv[1], "r");
if (stream == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
while ((nread = getline(&line, &len, stream)) != -1) {
printf("Retrieved line of length %zu:\n", nread);
fwrite(line, nread, 1, stdout);
}
free(line);
fclose(stream);
exit(EXIT_SUCCESS);
}