printf 为 %d 说明符打印字符而不是数字
printf prints character instead of digit for %d specifier
在xcodec项目中,代码:
#include <stdio.h>
int main()
{
int* pi = (int*) malloc(sizeof(int));
*pi = 5;
printf("*pi: %d\n", *pi);
free(pi);
return 0;
}
打印 't' ,而不是 5,尽管我明确包含了 %specifier,根据规范应该打印带符号的十进制整数。我希望 '%c' 说明符会打印出来。到底是怎么回事?
C 动态内存分配函数在 stdlib.h 头文件中定义。
如果您将 'standard library' 添加到您的代码中,它应该 运行 没有任何错误。
此外,malloc() returns 一个空指针,当它无法分配所请求的 space 时。所以,你应该通过使用一个简单的 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
在xcodec项目中,代码:
#include <stdio.h>
int main()
{
int* pi = (int*) malloc(sizeof(int));
*pi = 5;
printf("*pi: %d\n", *pi);
free(pi);
return 0;
}
打印 't' ,而不是 5,尽管我明确包含了 %specifier,根据规范应该打印带符号的十进制整数。我希望 '%c' 说明符会打印出来。到底是怎么回事?
C 动态内存分配函数在 stdlib.h 头文件中定义。
如果您将 'standard library' 添加到您的代码中,它应该 运行 没有任何错误。
此外,malloc() returns 一个空指针,当它无法分配所请求的 space 时。所以,你应该通过使用一个简单的 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