3

私の演習の1つでは、行ごとに読み取り、getcharとprintfのみを使用して出力する必要があります。私はK&Rをフォローしており、例の1つはgetcharとputcharの使用を示しています。私が読んだものから、getchar()はEOFまで一度に1文字ずつ読み取ります。私がやりたいのは、行末まで一度に1文字ずつ読み取りますが、char変数に書き込まれたものはすべて格納します。したがって、Hello、World!と入力すると、すべてが変数に格納されます。strstrとstrcatを使用しようとしましたが、成功しませんでした。

while ((c = getchar()) != EOF)
{   
    printf ("%c", c);
}
return 0;
4

1 に答える 1

4

行を格納するには、複数の文字が必要になります。たとえば、次のように文字の配列を使用します。

#define MAX_LINE 256
char line[MAX_LINE];
int c, line_length = 0;

//loop until getchar() returns eof
//check that we don't exceed the line array , - 1 to make room
//for the nul terminator
while ((c = getchar()) != EOF && line_length < MAX_LINE - 1) { 

  line[line_length] = c;
  line_length++;
  //the above 2 lines could be combined more idiomatically as:
  // line[line_length++] = c;
} 
 //terminate the array, so it can be used as a string
line[line_length] = 0;
printf("%s\n",line);
return 0;

これでは、固定サイズ(この場合は255)より長い行を読み取ることはできません。K&Rは、後で動的に割り当てられたメモリを教えてくれます。このメモリを使用して、任意の長さの行を読み取ることができます。

于 2011-02-05T19:16:45.073 に答える