将char [128]数组写入C中的文件

时间:2014-04-24 03:46:04

标签: c string file

我编写了一个程序来测试使用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;
}

2 个答案:

答案 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.txtcat 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)。在哪里写,在文件中写什么取决于您的要求。