ошибка сегментации [char] и sprintf - PullRequest
1 голос
/ 07 марта 2012

Вот урезанная версия моей программы.Я не понимаю, почему здесь возникает ошибка сегментации.

....
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 ]

5 голосов
/ 07 марта 2012

Вы должны использовать

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

%s ожидает строку, а не целое число. Так как какое-то случайное целое число вряд ли может быть действительным указателем на что-то, похожее на NULL-завершенную строку, происходит SEGFAULT.

3 голосов
/ 07 марта 2012

Вы просите sprintf() отформатировать строку и поместить ее в buffer. В результате он обрабатывает ваше целое число без знака как указатель - и, вероятно, очень плохой указатель, следовательно, segfault. Измените %s на %u, чтобы запросить форматирование целого числа без знака.

1 голос
/ 07 марта 2012

Вы пытаетесь интерпретировать целое число как строку.Это приводит к тому, что printf пытается прочитать строку с адреса с числом, которое get_timer_ticks возвращаетсяВероятно, по этому адресу нет действительной строки.

0 голосов
/ 07 марта 2012

Вам нужно использовать %u вместо %s в sprintf.

0 голосов
/ 07 марта 2012

Спецификатор формата %s предназначен для строк в стиле C, но get_timer_ticks возвращает Uint32.Возвращаемое значение вряд ли имеет смысл для sprintf.

...