1

getline() で行を解析する方法については、途方に暮れています。行にある各文字を見てみたいと思います。

したがって、誰かが標準入力に「こんにちは」と入力した場合、次の方法で char 配列にアクセスできるようにしたいと思います。

line[0] = 'H' 
line[1] = 'e' 
line[2] = 'l'
line[3] = 'l'
line[4] = 'o'
line[5] = '/0';

getchar() も見ましたが、getline() の方が便利な気がするので試してみたいと思います。scanf() も調べましたが、空白がスキップされ、getchar() や getline() ほどうまく入力を解析できません。

以下は、stdin を介して行の最初の文字を取得しようとする単純なコードですが、セグ フォールトが発生します。

#include <stdio.h>                                                                                                
#include <stdlib.h>                                                                                               

int main()                                                                                                        
{                                                                                                                 
  int len;                                                                                                        
  int nbytes = 100;                                                                                               
  char *line = (char *) malloc (nbytes + 1);                                                                      

  while(getline(&line, &nbytes, stdin) > 0){                                                                      
    printf("first char: %s", line[0]);  //try and get the first char from input

    /**
     * other code that would traverse line, and look at other chars 
     */                                                                         
  };                                                                                                              

  return 0;                                                                                                       
} 

ありがとう。

4

1 に答える 1

4

%c書式指定子を使用して、1 文字を出力します。

コード

printf("first char: %s", line[0])

line[0]char 配列のアドレスとして処理しようとします。最初の文字だけを印刷したい場合は、次のように変更します

printf("first char: %c", line[0])
//                   ^

コードの他の部分で考慮できるその他の小さな変更がいくつかあります。

  • malloc からのリターンをキャストする必要はありません
  • あなたはfree(line)whileループの後にすべきです
于 2013-01-24T17:23:04.977 に答える