2012-03-07 57 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