这个 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
.
这是我试图理解的代码:
#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
.