这是我的程序的剥离版本。我不知道为什么我在这里遇到分段错误。
....
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。
答案 0 :(得分:5)
你应该使用
sprintf(buffer,"%u",get_timer_ticks(&mytimer));
%s
需要字符串,而不是整数。由于某些随机整数不太可能是类似以NULL结尾的字符串的有效指针,因此会发生SEGFAULT。
答案 1 :(得分:3)
您要求sprintf()
格式化字符串并将其放入buffer
。结果,它将无符号整数视为指针 - 可能是一个非常糟糕的指针,因此是段错误。将您的%s
更改为%u
,以请求它格式化无符号整数。
答案 2 :(得分:1)
您正在尝试将整数解释为字符串。这会导致printf尝试从地址中读取一个字符串,其中get_timer_ticks
发生的数字恰好返回。这个地址可能没有有效的字符串。
答案 3 :(得分:0)
%s
格式说明符用于C样式字符串,但get_timer_ticks
返回Uint32。返回的值不太可能对sprintf
有意义。
答案 4 :(得分:0)
您需要在sprintf中使用%u
代替%s
。