使用写入函数改写int表

时间:2013-11-01 21:18:54

标签: c++ file-io descriptor

尝试将整数表发送到文件,但是我遇到了一些错误:

        fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
        const int size = 20;
        int *p = new int[size];
        for(int i=0; i<size; i++) {
            p[i] = i;
        }
        write (fd[0], p, sizeof(int)*size); 
        close(fd[0]);

在我的文件中调用此代码后,我看到如下内容:\00\00\00\00\00\00\00

2 个答案:

答案 0 :(得分:2)

这将写入空格分隔的整数,并带有尾随空格。除了“text”之外,你并没有真正说出你需要的格式。

    fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
    if(fd[0] < 0) {
        perror("open");
    }
    const int size = 20;
    //int *p = new int[size];
    for(int i=0; i<size; i++) {
        char buf[20];
        snprintf(buf, sizeof(buf), "%d ", i);
        write(fd[0], buf, strlen(buf));
    }
    //write (fd[0], p, sizeof(int)*size); 
    close(fd[0]);

答案 1 :(得分:1)

在文件中写入数据时,如果要使用文本编辑器读取数据,则需要将变量转换为字符串(序列化)。

为此,您可以使用fprintffscanf,或者实现自己的解析功能,只需要操作字符串。

为了生成可读文件,您的代码可以在以下位置修改:

FILE *f = fopen(argv[1], "w"); // "a", "w" or what you want
const int size = 20;
int *p = new int[size];
for(int i=0; i<size; i++) {
  p[i] = i;
  fprintf(f, "%d ", p[i]); 
}

fclose(f);

要阅读该文件,您可以:

FILE *f = fopen(argv[1], "r");
int nb = 0;
int tab[100]; // a buffer

while((1 == fscanf("%d ", &tab[nb])) && (nb < 100))
  nb++;