这个 C 编程读物是什么?

What is this C programming reading?

这是我试图理解的代码:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main(void){

    unsigned long word;
    ssize_t nr;

    int file = open("koray.txt",O_RDONLY);

    nr = read(file,&word,sizeof(unsigned long));
    printf("%li\n",word);

}

koray.txt 只有 1 个字符,即 k.

当我运行我看到的程序时:

koray@koray-VirtualBox:~$ ./a.out
4195435

这个大值是多少?

word 变量中会有随机垃圾,因为您从未对其进行初始化。然后 read 只能从文件中获取一个字节(nr 可能返回 1,你应该检查一下!)这节省了一个字节,但是 word 变量仍然有 3-其中打印了 7 个字节的未初始化垃圾。

问题 1

您从未检查过 read() 的 return,所以它很可能会失败。

即使它没有失败,如 @Adam D. Ruppe 先生在 中所解释的那样,如果文件包含的元素少于 sizeof(unsigned long),那么word的剩余部分将保存垃圾值,因为word是一个局部变量并且具有自动存储持续时间,除非初始化,否则包含不确定的值明确地。

点 2

您使用 %li 打印了 unsigned long。 UB。你需要使用 %lu.