c - 为什么程序的输出是不同的?

标签 c file

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

int main()
{
    FILE *fp;
    char ch;
    char buffer[80] ;
    fp = fopen("c:\\Rasmi Personal\\hello.txt", "w");

    if(fp == NULL)
    {
        printf("File not found");
        exit(1);
    }
    else
    {
        while(1)
        {
            gets(buffer);
            fwrite(buffer, strlen(buffer), 2, fp); /* I made, size_t nitems = 2 (third element/argument)*/
            fwrite("\n", 1, 1, fp);
        }

    }

    fclose(fp);

    return 0;
}

输入:

Rasmi Ranjan Nayak

输出:

Rasmi Ranjan Nayak      0@ ÿ" 8ÿ" 

为什么会出现这些垃圾。

根据 fwrite() 函数。如果 size_t nitems 大于 1,则输入的文本将被写入多次。 但是为什么我得到垃圾?

最佳答案

你告诉 fwrite() 从缓冲区写入两次 strlen(buffer) 字节(通过设置 nmemb = 2 你正在让它写入两个“对象”,每个都是 strlen(buffer) 字节长),所以它读取的字节数是实际存在的字节数的两倍。

“垃圾”就是字符串在 buffer 中结束后出现在内存中的任何内容。

这是错误的代码,nmemb 应该是 1

关于c - 为什么程序的输出是不同的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10702666/

相关文章:

c - 如何使用vscode在c中调试 'extern'

c - 运行 malloc 后内存损坏

c - 在 C 中,如何确保内存加载只执行一次?

java - 如何在 Java 中创建文件并输出到文件

xml - 用于更新 XML 文件内容的 Powershell 脚本

java - 在Linux中从Java访问 "~"(用户主目录)

java - 无法使用 Java 删除文件夹

编译错误: "format ‘%f’ expects argument of type ‘double’ "

c - 如何使用 NodeMCU 通过 TCP 发送/接收二进制数据?

c++ - 当我终止应用程序时无法保存写入文件的数据