hallaa 2024-04-21 20:03 采纳率: 87.5%
浏览 3
已结题

linux从from文件读取字符到to文件出错

为什么从from文件只读取了开头的一个T啊,from文件第一行T后面并不是文件尾啊 后面不是还有字符吗

刚刚调试了一下,从from读取的文件是没有问题的,是整个from文件里的字符,但为什么写到to文件里面的只有一个开头的一个T啊,试了好几种写入方式也不行😭

这是from文件

img

这是to文件 第一行是to文件的原始内容 第二行是从from文件读取的T

img

这是读取文件的程序代码

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-21 20:03
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码片段中,存在一些可能导致问题的地方。首先,让我们分析一下代码并进行相应的修改。

    您的代码有以下几个问题:

    1. 使用了错误的文件打开模式:在open函数中,您使用了0_RDONLY和0_WRONLY,这实际上是未定义的宏。应该分别使用O_RDONLYO_WRONLY
    2. 在检查open函数返回值时,条件语句的语法不正确。应将条件表达式放在括号内。
    3. 您没有处理read函数可能返回-1的情况(表示发生错误)。

    下面是修复这些问题后的代码:

    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    
    void err_exit(const char* message) {
        perror(message);
        exit(1);
    }
    
    int main(int argc, char** argv) {
        int n, from, to;
        char buf[1024];
    
        if (argc != 3) {
            printf("Usage: %s from-file to-file\n", argv[0]);
            exit(1);
        }
    
        // Open 'from' file in read-only mode
        if ((from = open(argv[1], O_RDONLY)) < 0) {
            err_exit(argv[1]);
        }
    
        // Open 'to' file in write-only and create-if-not-exists mode with appropriate permissions
        if ((to = open(argv[2], O_WRONLY | O_CREAT | O_APPEND, 0644)) < 0) {
            err_exit(argv[2]);
        }
    
        while ((n = read(from, buf, sizeof(buf))) > 0) {
            write(to, buf, n);
        }
    
        // Check for read error
        if (n == -1) {
            perror("Error reading from file");
            exit(1);
        }
    
        close(from);
        close(to);
    
        return 0;
    }
    

    确保您的源代码文件名为copy_file.c,然后编译它:

    gcc copy_file.c -o copy_file
    

    接下来,运行新编译的程序:

    ./copy_file from.txt to.txt
    

    这样应该可以正确地从from.txt复制所有内容到to.txt,包括每一行的内容。如果仍然存在问题,请提供详细的错误信息以便进一步排查。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 修改了问题 4月21日
  • 修改了问题 4月21日
  • 展开全部