web-dev-qa-db-ja.com

Creadline関数

大学の課題では、演習でC readline関数を使用することが提案されました。その参照を検索しましたが、まだ見つかりません。それは本当に存在しますか?どのヘッダーに?参考文献へのリンクを投稿していただけますか?

13
nunos

Readlineは、libreadlinelibeditlibeditlineとも呼ばれます)の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

15
Tim Post

標準機能ではないと思います。

簡単な実装は次のようになります。

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'に読み込みます。先行する空白を取り除き、最初の非空白文字へのポインタを返します。

3
yassin

Java-BufferedReaderのreadLine()のような「readLine()」関数が必要な場合は、「line.h」で私の関数"char * get_line(FILE * filePointer)"を自由に使用することもできます。この目的: https://github.com/pheek/line.h/blob/master/line.h

0
iGeeks

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);
   }
0
Ajay Sharma