使用getline()从stdin读取整行时出现意外的输出?

时间:2013-03-07 10:05:10

标签: c linux

我正在研究c,以下是我的代码:

#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指针中的原因可能是什么(即它是一个包含许多空格的字符串)? 我在linux上使用gcc 4.1.2版本

2 个答案:

答案 0 :(得分:5)

来自getline的手册页

  

getline()从流中读取整行,存储地址   包含文本的缓冲区为* lineptr。缓冲区是   以null结尾并包含换行符(如果找到)。

我认为这解释了它。它不是一个包含许多空格的字符串,而是一个以新行结尾的字符串。

答案 1 :(得分:0)

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

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