[英]char [] and sprintf segmentation fault
这是我程序的精简版。 我不明白为什么我在这里遇到细分错误。
....
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。
你应该用
sprintf(buffer,"%u",get_timer_ticks(&mytimer));
%s
需要字符串,而不是整数。 由于某个随机整数不太可能是指向类似于NULL终止字符串的有效指针,因此会发生SEGFAULT。
您要sprintf()
格式化字符串并将其放入buffer
。 结果,它将您的无符号整数视为一个指针-可能是一个非常糟糕的指针,因此出现了段错误。 将您的%s
更改为%u
以请求其设置无符号整数的格式。
您正在尝试将整数解释为字符串。 这导致printf尝试从地址中读取一个字符串,该地址的编号恰好会返回get_timer_ticks
。 此地址可能没有有效的字符串。
%s
格式说明符适用于C风格的字符串,但get_timer_ticks
返回get_timer_ticks
。 返回的值对于sprintf
来说不太可能有意义。
您需要在sprintf中使用%u
而不是%s
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.