簡體   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