[英]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.