[英]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
只有一个字符是k
。
当我运行程序时,我看到:
koray@koray-VirtualBox:~$ ./a.out
4195435
这个大价值是多少?
word
变量中会有随机垃圾,因为你从未初始化它。 然后read
将只能从文件中获取一个字节( nr
可能返回1,你应该检查!),它保存了一个字节,但是word
变量仍然有3-7个字节的未初始化的垃圾进行打印。
问题1
你从来没有检查过read()
的返回,所以很可能会失败。
即使它没有失败,正如@Adam D. Ruppe先生的回答所解释的那样 ,如果文件包含的元素少于sizeof(unsigned long)
,那么word
的剩余部分将保存垃圾值,因为word
是a局部变量并具有自动存储持续时间,其中包含不确定的值,除非明确初始化。
第2点
您使用%li
打印unsigned long
。 UB。 你需要使用%lu
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.