printf为%d说明符

时间:2015-12-27 21:05:43

标签: c xcode printf specifier

在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'说明符会打印出来。到底是怎么回事?

enter image description here

1 个答案:

答案 0 :(得分:2)

C动态内存分配函数在 stdlib.h 标题中定义。

如果您添加标准库&#39;对于您的代码,它应该运行没有任何错误。

此外,malloc()在无法分配请求的空间时返回空指针。因此,您应该通过使用简单的if-else块确保您收到的内容不是NULL。

#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