为什么我不能从我写文本的文件中读取数据。 C

时间:2015-05-27 13:51:21

标签: c character-encoding

我是C的新人所以我有点困惑。这是我的代码:

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
#define FILENAME "/var/note"

int main(int argc, char *argv[])
{
  int userid = getuid();
  int fd = open(FILENAME, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR);
  write(fd, &userid, 4);
}

基本上我在文本文件中编写UID。但是,当我尝试实际打开笔记文件(用手)它给我的错误说:

  

您打开的文件中包含一些无效字符。如果继续编辑此文件,则可能会损坏此文档。   您也可以选择其他字符编码,然后重试。

我无法弄清楚为什么它会给我这个错误(当我实际上在这个文件中写了一些文字时)以及如何解决它。在我看来,问题在于字符编码,但我不知道使用哪一个。对不起,问题听起来很傻。谢谢。

1 个答案:

答案 0 :(得分:1)

write(fd, &userid, 4);

您正在从userid变量的开头开始写入4字节的数据,这是int

假设您的用户ID为42,您的LSB位于右侧(按人类阅读顺序排列),您的体系结构位于Big endian。您的变量包含这4个字节:

0000 0000  0000 0000  0000 0000  0010 1010

您正在文件中写入这4个字节,这会产生以下字符:

NUL NUL NUL *

你的记事本警告你,因为文件中的NUL不正常(提醒:这是为guid 42写的, YMMV