printf печатает символ вместо цифры для%d спецификатора
На проекте xcode c, код:
#include <stdio.h>
int main()
{
int* pi = (int*) malloc(sizeof(int));
*pi = 5;
printf("*pi: %d\n", *pi);
free(pi);
return 0;
}
печатает 't' вместо 5, хотя я явно включил спецификатор%, который согласно спецификации должен печатать десятичное целое число со знаком. Я ожидаю, что спецификатор "%c" напечатает это. Что здесь происходит?
1 ответ
Решение
Функции динамического выделения памяти на Си определены в заголовке stdlib.h.
Если вы добавите "стандартную библиотеку" в свой код, она должна работать без ошибок.
Кроме того, malloc() возвращает нулевой указатель, когда не удается выделить запрошенное пространство. Итак, вы должны убедиться, что то, что вы получили, не равно NULL, используя простой блок if-else.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* pi = (int*) malloc(sizeof(int));
if(pi==NULL){
printf("Malloc Failed!");
return -1;
}
else{
*pi = 5;
printf("*pi: %d\n", *pi);
free(pi);
return 0;
}
}
Блок кода выше дает ожидаемый результат *pi: 5.
Надеюсь это поможет,
Ссылка: https://en.wikipedia.org/wiki/C_dynamic_memory_allocation