c getline() - 如何解析一条线?

时间:2013-01-24 17:21:37

标签: c getline

我对如何解析getline()中的行感到茫然。我想看一下该行中的每个字符。

因此,如果有人输入:“Hello”到stdin,我希望能够以这种方式访问​​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获取一行的第一个char,但会导致seg错误:

#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;                                                                                                       
} 

感谢。

1 个答案:

答案 0 :(得分:4)

使用%c格式说明符打印单个字符。

代码

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

将尝试将line[0]视为char数组的地址。如果您只想打印出第一个字符,请将其更改为

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

您可以在代码的其他部分考虑其他一些小的更改:

  • 您不需要从malloc
  • 转换回报
  • 你应该在你的while循环之后free(line)
相关问题