我编写了一个程序来测试使用 C 中的 write() 函数将 char[128] 数组写入文件。以下是我的代码,但是,在编写之后,我可以看到字符串“testseg”后跟一个testFile.txt 文件中的“d”或“È”。这是将 char[] 数组写入文件的正确方法吗?
int main()
{
char pathFile[MAX_PATHNAME_LEN];
sprintf(pathFile, "testFile.txt");
int filedescriptor = open(pathFile, O_RDWR | O_APPEND | O_CREAT, 0777);
int num_segs = 10;
int mods = 200;
const char *segname = "testseg"; /* */
char real_segname[128];
strcpy(real_segname, segname);
write(filedescriptor, &num_segs, sizeof(int));
write(filedescriptor, real_segname, strlen(real_segname));
printf("real_segname length is %d \n", (int) strlen(real_segname));
write(filedescriptor, &mods, sizeof(int));
close(filedescriptor);
return 0;
}
最佳答案
...将 char[128] 数组写入文件...我可以看到字符串“testseg”...
是矛盾的。
在 C 中,字符串是 char
后跟一个 '\0'
和
char[128]
的长度固定为 128 个 char
。
当代码执行 write(filedescriptor, real_segname, strlen(real_segname));
时,它两者都不执行。它不是在编写 C 字符串,“testseg”的 7 个 char
以 '\0'
结尾。相反,它只写入了 7 个 char
而没有终止 '\0'
。它也没有写入 128 char
。
一个可以代替执行write(filedescriptor, real_segname, strlen(real_segname)+1);
来写7个char
和终止'\0'
。或者写长度,然后写arry的有趣部分。或者写入整个 128 个 char
数组。需要确定您希望如何回读数据和其他编码目标才能很好地提供建议。
正如@SGG 所建议的,不寻常的 char
只是 write(filedescriptor, &mods, sizeof(int));
的结果,而不是未终止数组的一部分.
关于c - 将char [128]数组写入C中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259434/