2012-03-07 103 views
1

這裏是我的程序的剝離版本。我不明白爲什麼我在這裏得到分段錯誤。char []和sprintf分段錯誤

.... 
int main(int argc, const char * argv[]) 
{ 
    char quit = 0; 
    char buffer[100]; 
    ... 
    while (quit == 0) { 
     sprintf(buffer,"%s",get_timer_ticks(&mytimer)); 
     // puts(buffer); 
... 
} 

編輯:順便說一句,get_timer_ticks返回Uint32。

回答

5

您應該使用

sprintf(buffer,"%u",get_timer_ticks(&mytimer)); 

%s預計字符串,而不是整數。由於某些隨機整數不太可能是類似NULL結尾字符串的有效指針,因此會出現SEGFAULT。

0

%s格式說明符用於C風格字符串,但get_timer_ticks返回Uint32。返回的價值不太可能對sprintf有意義。

3

您要求sprintf()格式化字符串並將其放入buffer。因此,它會像指針一樣處理你的無符號整數 - 並且可能是一個非常糟糕的指針,因此是段錯誤。將您的%s更改爲%u以請求它格式化無符號整數。

1

您試圖將整數解釋爲字符串。這會導致printf嘗試從地址中讀取一個字符串,其中get_timer_ticks恰好會返回。這個地址可能沒有有效的字符串。

0

您需要在sprintf中使用%u而不是%s