繁体   English   中英

这个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只有一个字符是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM