为什么当我在另一个函数中使用 fwrite 与在同一函数中使用 fwrite 时输出文件不同?
output1.txt 包含像 Ê 这样的垃圾值,这是不正确的
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
两个指针指向相同的位置,但类型不同,语义不同。
关于c - C中的fwrite在输出文件中给出不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46997747/