char []和sprintf分段错误

时间:2012-03-07 16:47:42

标签: c char segmentation-fault printf

这是我的程序的剥离版本。我不知道为什么我在这里遇到分段错误。

....
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 个答案:

答案 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