2012-03-07 2 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. В результате он обрабатывает ваше целое без знака, как указатель, и, вероятно, очень плохой указатель, следовательно, segfault. Измените свой %s на %u, чтобы запросить его форматирование целого числа без знака.

1

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

0

Необходимо использовать %u вместо %s в спринте.

Смежные вопросы