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



我编写了一个程序来测试使用 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(。在哪里写,在文件中写什么取决于您的要求。

相关内容

  • 没有找到相关文章

最新更新