我编写了一个程序来测试使用 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] 数组写入文件 ...我可以看到字符串"testeg"...
是一个矛盾。
在 C 语言中,字符串是一个char
数组,后跟并包含 ' '
和char[128]
是固定的 128 char
长度。
当代码write(filedescriptor, real_segname, strlen(real_segname));
时,它两者都不。 它不是在写一个 C 字符串,7 char
的"testseg"以 ' '
结尾。 相反,它只写了 7 char
,没有终止' '
。 它也没有写 128 char
.
可以改为执行write(filedescriptor, real_segname, strlen(real_segname)+1);
来写入 7 char
和终止' '
。 或者写长度,然后写下arry的有趣部分。 或者写下整个 128 char
数组'。 需要确定您希望如何读回数据和其他编码目标以提供良好的建议。
正如@SGG所暗示的,异常char
只是write(filedescriptor, &mods, sizeof(int));
的结果,而不是未终止数组的一部分。
after writing, I can see that the string "testseg" is followed by a "d" or "È" in the testFile.txt file
为什么它显示"d"或"È"??
仅在下面尝试write
函数(在您的代码中,注释剩余的写入调用,除了下面的调用(
write(filedescriptor, &mods, sizeof(int));
现在查看testFile.txt
(cat testFile.txt
(的内容。它显示一些垃圾值。
因为,所有.txt
文件都将以ASCII text
格式的形式显示给您。它将每个字节转换为ASCII
字符。您以 ASCII 格式编写并读取为 ASCII 格式的字符串和字符。所以没问题。但在这里,您将mods and num_segs
写为整数并将它们读取为 ASCII 格式。所以你得到了那些垃圾价值。
Is this a proper way of writing char[] array to file?
是的,根据手册页,您正在以正确的方式编写它们。并确保验证您的函数调用(write
(。在哪里写,在文件中写什么取决于您的要求。