2012-02-02 82 views
0

爲什麼,如果我做到以下幾點:爲什麼gettimeofday()和time_t沒有意義?

time seconds 4 useconds 4259840 

是使用4259840個字節time.tv_usec

struct timeval time; 

gettimeofday(&time, NULL); 

log("time seconds %i useconds %i", sizeof(time.tv_seconds), sizeof(time.tv_usec)); 

是否在OpenWrt的回報? tv_seconds(因爲時代)是有意義的,因爲它是一個漫長的整數。但tv_usec應該始終低於100萬。

回答

3

sizeof操作員會讓您返回size_t對象。您應該使用%zu格式打印出來,而不是%i。由於格式字符串和參數類型不匹配,很可能會有一些參數傳遞錯誤。如果您在編譯器中提高了警告級別,則應該收到關於它的警告。例如,鐺告訴我:

example.c:7:25: error: conversion specifies type 'int' but the argument has type 
     'unsigned long' [-Werror,-Wformat] 
    printf("time seconds %i useconds %i\n", sizeof(time.tv_sec), ... 
         ~^     ~~~~~~~~~~~~~~~~~~~ 
         %lu          

當然,這取決於你如何功能log()實現 - 這也可能是你的錯誤的來源。

+0

它們都應該很長,但出於某種原因,當我將它們輸出爲格式爲%li的字符串時,它不起作用。所以我已經嘗試過,lli爲tv_seconds工作。 tv_useconds總是出錯。這就是爲什麼我試圖弄清楚這些變量的實際大小。 – napierzaza 2012-02-02 02:55:56

+0

@Nathan No:'struct timeval.tv_sec'被定義爲'time_t',而不是'long'。此外,我的手冊告訴我'struct timeval.tv_usec'是'suseconds_t',而不是'long long'。 – 2012-02-02 03:26:00

1

對着我的水晶球......問題是你的日誌功能不正確地解析它的參數。嘗試printf代替。

+1

如果你這樣做會發生什麼:log(「time seconds%i useconds%i」,4lu,4lu)? – 2012-02-02 03:11:26

+0

廢話,你是對的。我不知道爲什麼它不起作用。更多的錯誤,更多的錯誤與字符串做! – napierzaza 2012-02-02 03:14:10