这是我的小C程序:
int main(int ac, char **av)
{
int fd;
if ((fd = open("./test.dot", O_RDWR | O_CREAT | O_TRUNC, 0644)) == -1)
{
perror("[open]");
return (-1);
}
write(fd, "digraph g {\n", sizeof("digraph g {\n"));
write(fd, " a -> b -> c\n", sizeof(" a -> b -> c\n"));
write(fd, " b -> d\n", sizeof(" b -> d\n"));
write(fd, " }\n", sizeof(" }\n"));
close(fd);
}
它打开一个文件,写一些东西并关闭它。
它几乎可以工作。几乎。这是我检查文件内容时得到的结果:
digraph g {
^@ a -> b -> c
^@ b -> d
^@ }
^@
似乎这些字符出现在每个换行符之后。怎么了?
答案 0 :(得分:4)
sizeof("digraph g {\n")
包含null终止符,因此字符串将以'\0'
字符写入文件中。
您的文件查看器使用^@
有向图显示零。
您根本不应该使用sizeof
- 而是使用strlen
。更好的是,使用适当的I / O函数将字符串写入文件,而无需在单独的参数中提供它们的长度。如果您必须使用write
,请创建自己的函数,调用strlen
,然后调用write
,这样就可以避免键入字符串常量两次。
答案 1 :(得分:1)
^@
是您的观看者对'\0'
的表示。
示例:sizeof(" }\n")
为4. ' '
,'}'
,'\n'
,'\0'
,
答案 2 :(得分:1)
我认为您应该使用sizeof("string")
而不是strlen("string")
。