我编写了一个程序来测试使用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;
}
答案 0 :(得分:2)
...将char [128]数组写入文件...我可以看到字符串" testseg" ...
是一个矛盾。
在C中,字符串是char
的数组,后跟并包括'\0'
和。{
char[128]
长度固定为128 char
。
当代码执行write(filedescriptor, real_segname, strlen(real_segname));
时,它既不会执行。它不是写一个C字符串,7 char
" testseg"以'\0'
终止。相反,它只写了7 char
而没有终止'\0'
。它也没有写成char
。
一个可以代替执行write(filedescriptor, real_segname, strlen(real_segname)+1);
来编写7 char
和终止'\0'
。或者写出长度,然后写出arry的有趣部分。或者写出整个128 char
数组`。需要确定您想要如何读取数据以及其他编码目标以便提供建议。
正如@SGG建议的那样,异常char
只是write(filedescriptor, &mods, sizeof(int));
的结果,而不是未终止数组的一部分。
答案 1 :(得分:1)
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
)。在哪里写,在文件中写什么取决于您的要求。