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

标签 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;
}

最佳答案

...将 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/

相关文章:

为交叉编译器构建 newlib 时出现 'gettimeofday' 的类型冲突

Java 字符串和数学表达式计算器

c - 尝试为文件 IO : 创建多个线程时出现段错误

c - printf 语句中用于宽度和精度的子说明符

java - 使用 JNI 将 C++ 类成员函数绑定(bind)到 Java

java - 音频文件 - 操作给定字节帧的音量 - Java

c++ - 我怎样才能从文件中提取文件属性/元数据/注释

javascript - 屏蔽字符串

c# - 如果字符串包含用户定义的 "value",如何返回字符串的完整内容?

c++ - 一次写入多个文件