2016-12-22 3 views
-1

Это проблема, которую я все время пытаюсь исправить, но терпеть неудачу. Почему вы думаете, что это так?Этот код C продолжает давать мне ошибку сегментации в кодовых блоках

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

     int main(void) 
    { 
     char str[500]; 
     sprintf(str, "int cube = %i;", 29); 
     char *ptr; 
     strtok_r (str, "=", &ptr); 
     printf ("'%s' '%s'\n\n", str, ptr); 
     char temp[500]; 
     sprintf(temp, "%s", ptr); 
     int conditional = atoi(temp); 
     puts(conditional); 
     return 0; 
     } 
+0

Просьба показать ваше исследование/отладку до сих пор. Сначала прочитайте страницу [Ask]. –

+1

Используйте возвращаемое значение 'strtok_r'. – BLUEPIXY

+1

'puts (условный);' -> 'printf ("% d \ n ", условный);' – BLUEPIXY

ответ

3

Проблема здесь:

puts(conditional); 

puts функция ожидает char *, которая указывает на строку. Вместо этого вы принимаете int. Это неопределенное поведение.

Значение этого параметра int интерпретируется как указатель, который, вероятно, не указывает на допустимую ячейку памяти, вызывающую сбой.

Если вы хотите напечатать int, используйте printf вместо этого с спецификатором формата %d.

printf("%d\n", conditional);