使用指针写入/读取文件,C

时间:2015-07-13 16:43:52

标签: c file pointers fwrite fread

我编写了一个程序来乱写文件指针(fwrite)和从文件读取指针(fread)。然而,该程序似乎并没有在文件中写入任何内容,也不会从文件中读取任何内容;它只是打印指针的最终增量5次并退出。任何人都可以发现我的语法错误/错误,似乎这样做?



#include <stdio.h>

int main() {
    FILE *fTest;
    int *testPtr;
    int x = 10;
    
    if ((fTest = fopen("test.c", "wb")) == NULL) {
        printf("Error!");
    }

    testPtr = &x;
    int i;
    for (i = 0; i < 5; i++) {
        fwrite(testPtr, sizeof(int), 1, fTest);
        *testPtr += 1;
    }
    
    for (i = 0; i < 5; i++) {
        fread(testPtr, sizeof(int), 1, fTest);
        printf("%d", *testPtr);
    }

    fclose(fTest);
}
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:4)

采取的步骤:

  1. 将数据写入文件。
  2. 关闭文件。
  3. 以读取模式再次打开文件。
  4. 从文件中读取数据。
  5. 这应该有效。

    另外,输出文件名test.c似乎有点奇怪。这是故意的吗?

    #include <stdio.h>
    
    int main() {
        FILE *fTest;
        int *testPtr;
        int x = 10;
        char const* file = "test.data"; // Using .data instead of .c
    
        testPtr = &x;
    
        int i;
    
        // Write the data.
        if ((fTest = fopen(file, "wb")) == NULL) {
            printf("Error!");
        }
        for (i = 0; i < 5; i++) {
            fwrite(testPtr, sizeof(int), 1, fTest);
            *testPtr += 1;
        }
    
        fclose(fTest);
    
        // Read the data.
        if ((fTest = fopen(file, "rb")) == NULL) {
            printf("Error!");
        }
    
        for (i = 0; i < 5; i++) {
            fread(testPtr, sizeof(int), 1, fTest);
            printf("%d", *testPtr);
        }
    
        fclose(fTest);
    }
    

答案 1 :(得分:1)

不考虑你不检查fwrite()的thre返回值这一事实我会假设你写入“test.c”,在你运行程序后,文件应该存在,其大小为{ {1}}字节。但你无法阅读它有两个原因:

  1. 您以只写方式打开文件。将5 * sizeof(int)更改为"wb"以允许阅读
  2. 写完后,必须将读写指针重置为文件的开头:在阅读之前调用"w+b"

答案 2 :(得分:1)

问题是,当您在写入模式下打开文件时,您正在读取文件。

在写循环和读循环之间添加此代码,它将起作用:

fclose(fTest);
if ((fTest = fopen("test.c", "rb")) == NULL) {
    printf("Error!");
}