我编写了一个程序来乱写文件指针(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;
答案 0 :(得分:4)
采取的步骤:
这应该有效。
另外,输出文件名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}}字节。但你无法阅读它有两个原因:
5 * sizeof(int)
更改为"wb"
以允许阅读"w+b"
答案 2 :(得分:1)
问题是,当您在写入模式下打开文件时,您正在读取文件。
在写循环和读循环之间添加此代码,它将起作用:
fclose(fTest);
if ((fTest = fopen("test.c", "rb")) == NULL) {
printf("Error!");
}