2013-03-07 115 views
2

我工作的C,以下是我的代码:使用getline()从标准输入读取整行时出现意外输出?

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

int main() 
{ 
     char* str = NULL; 
     size_t n; 

     printf("Enter the string : \n"); 
     getline(&str, &n, stdin); 
     printf("Initial string is : (%s)\n", str); 
     return 0; 
} 

当我运行上面的程序它提供了以下的输出:

Enter the string : 
bsalunke 
Initial string is : (bsalunke 
) 

什么可能有意想不到的字符串的理由获得存储在str指针(即它是一个有很多空白的字符串)? 林使用gcc 4.1.2版本在Linux

回答

5

从手册页函数getline的

函数getline()读取来自流一整行,存储 地址包含文本到* lineptr缓冲区。缓冲区为 以null结尾,并包含换行符(如果找到)。

我认为这可以解释它。它不是一个带有许多空格的字符串,它是一个以新行结尾的字符串。

+0

@uab感谢您的回答,在了解问题 – BSalunke 2013-03-07 10:21:55

0

该程序不起作用,因为你正在编写你不明白的代码。您不能“将字符串存储在指针中”。你需要学习数组和指针。

您正试图将数据存储在随机内存位置,而不为数据分配任何内存。这完全是未定义的行为。

+0

虽然看起来像是这样,但getline会分配正确大小的缓冲区,如果传递NULL指针。 – teppic 2013-03-07 12:23:28