fwrite in C在输出文件中给出不同的值
问题描述:
为什么当我在另一个函数中使用fwrite时,输出文件会有所不同?VERSUS fwrite在同一个函数中?fwrite in C在输出文件中给出不同的值
output1.txt包含像E,这是不正确
output2.txt含 “B”,这是正确
#include <stdio.h>
#include <string.h>
void writeData(char *buf, char *path) {
FILE *fp1;
fp1 = fopen(path, "a");
fwrite(&buf, sizeof(char), strlen(buf), fp1);
}
int main() {
char buf[2] = "a";
char buf2[3] = "yb";
char file1_path[12] = "output1.txt";
char file2_path[12] = "output2.txt";
memset(buf, 0, sizeof(buf));
memcpy(buf, &buf2[1], strlen(buf2));
printf("%s\n", buf);
writeData(buf, file1_path);
FILE *fp2;
fp2 = fopen(file2_path, "a");
fwrite(&buf, sizeof(char), strlen(buf), fp2);
return(0);
}
答
在writeData
功能,在您的来电fwrite
:
fwrite(&buf, sizeof(char), strlen(buf), fp1);
变量buf
是指向写字符串中的第一个字符。它是char *
。然而,表达式&buf
是指向变量buf
的指针,其类型为char **
。这不是同一个数据。
它的工作原理,如果buf
是阵列因为无论然后buf
(这是真的&buf[0]
)和&buf
指向同一位置。尽管如此,它们仍然不同。
例如与
char buf[2];
然后buf
衰减的指针数组的第一元件(即&buf[0]
),并且是char *
类型。表达式&buf
是指向阵列的指针,并且是char (*)[2]
类型。
有点图形
+--------+--------+ | buf[0] | buf[1] | +--------+--------+ ^ | &buf[0] | &buf
两个指针到同一位置,但不同类型和不同的语义。
答
在功能写数据改变垃圾值
fwrite(&buf, sizeof(char), strlen(buf), fp1);
到
fwrite(buf, sizeof(char), strlen(buf), fp1);
答
写数据()应调用的fwrite(BUF,...)不使用fwrite(& BUF,...)
内部'写数据()'表达'&buf'指向一个指针,而不是缓冲液。 –
在'main'中,'&buf'也是错误的,编译器应该警告错误的类型!因为使用数组,*地址*'buf'和'buf'是相同的(但不是类型) –
并且关闭文件,它可能会给你意想不到的输出。 –