C字符串随换行符一起消失

时间:2015-11-13 00:36:42

标签: c

我是C和stackoverflow的新手,所以请原谅我,如果我的问题很愚蠢或重复。

所以我试图从.txt文件中读取一些字符串(和整数)并将其存储到元组数组中。从文件中读取的字符串似乎包含' \ n'每次,所以我使用strcspn()删除它。

    FILE* f = fopen("board.txt","r");
    int x;
    size_t size = 30;
    char *buffer;
    for (i=1;i<=32;i++)
        {
            buffer = (char *)malloc(size);
            x = getline(&buffer,&size,f);
            buffer[strcspn(buffer,"\n")] = 0;
            A[i].name = buffer;
            buffer = (char *)malloc(size);
            x = getline(&buffer,&size,f);
            buffer[strcspn(buffer,"\n")] = 0;
            A[i].type = buffer;
            buffer = (char *)malloc(size);
            x = getline(&buffer,&size,f);
            A[i].price = atoi(buffer);
        }
    for (i=1;i<=32;i++)
        printf("%s ",A[i].name);
    for (i=1;i<=32;i++)
        printf("%s ",A[i].type);

但是,当我尝试上面的代码时,printf无法打印任何内容。但是当我试图在printf中使用\ n时(printf(&#34;%s \ n&#34;,A [i] .type);)它工作得很好。当我删除&#34; \ n&#34;时,似乎字符串完全消失了,然后只有当我放置&#39; \ n&#39;因为我打印它。

有人可以解释代码中的错误吗?或者它是图书馆问题?提前谢谢。

编辑:所以为了进一步解释,我需要将这些字符串(名称和类型)打印到&#39;框中。形成一种棋盘游戏,所以我认为带来换绳会在以后引起很多麻烦。

2 个答案:

答案 0 :(得分:2)

这是正确的行为。 &#39; \ n&#39;导致操作系统刷新用于打印的缓冲区,以便它出现在stdout上。没有&#39; \ n&#39;操作系统还没有被强制将你的打印件写入stdout。

答案 1 :(得分:0)

printf属于标准I / O库,它是行缓冲功能。因此,当调用此函数时,它将字符存储在缓冲区中,获取输出(到stdout)的唯一方法是刷新换行符。这是它的设计方式,以便尽可能保持最少数量的系统调用。

尝试消除此,

 buffer[strcspn(buffer,"\n")] = 0;