#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main () {
char grade[5];
char name[30];
int fd = creat("notas.txt", 0644);
if (fd == -1) {
perror("notas.txt");
return 1;
}
while (1) {
scanf("%s %s", name, grade);
if (strcmp(name, "end") != 0) {
write(fd, name, 30);
write(fd, "\t", 1);
write(fd, grade, 5);
write(fd, "\n", 1);
} else {
close(fd);
return 0;
}
}
}
大家好。我正在尝试进入 *nix 内核 API 编程,并且我编写了上面的程序。它从命令行读取姓名和成绩,然后将它们写入文件。然而,该文件是乱码,我只能cat
它(不能用文本编辑器打开)并且我的数据出现在一堆乱码的随机字符中。 cat
文件后,我的提示符还有一堆前导随机字符,如 1C2;1C3
(...)。
为什么会这样?
谢谢大家
最佳答案
write()
将字节写入文件,而不是特定的字符串。 write()
的第三个参数是要写入的字节数。 write(fd, name, 30)
这样就向文件写入了 30 个字节,但是 name
中的字符串较短,所以一堆随机字符恰好在内存中写入文件。
在C语言中,字符串的长度是通过在字符串末尾放置一个nul字符('\0'
,即0)来表示的,可以用来检查strlen()
函数,所以需要这样写write(fd, name, strlen(name))
。
关于c - 胡乱使用 *nix API 会导致文本文件出现乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5166828/