我想将int
投射到char
。
这是我的代码。
#include <stdio.h>
int main(){
int i = 7;
char *s;
sprintf(s,"sprint f = %d",i);
printf("printf s = [%s]",s);
}
结束Segmentation fault
。
这有什么不对?
答案 0 :(得分:3)
您没有为s
分配任何内存。它只是一个NULL或指向随机位置的指针(取决于编译器)。试着写信就好像上床睡觉时没有关心你 - 而你刚刚闯入别人家的可能性比随意选择自己的床要大。因此,分段错误 - 计算机逮捕程序的方式。
要分配内存,您可以让编译器为您设置一些(char s[22]
),或者分配您自己的(char *s = malloc(22)
)。
答案 1 :(得分:1)
s
是一个无效的指针 - 因此你不能写入它指向的内存(如果有的话),也不能从中读取。为它分配内存:
char s[64];
或
char* s = malloc(64);
答案 2 :(得分:0)
代码需要内存到sprintf()
数据。
对于某些嵌入式应用程序,我需要精简,但要容忍int
为16,32或可能是64位,所以要正确调整缓冲区的大小:
static const char *format[] = "sprint f = %d";
// Size `s` to be sufficiently large as format and int size may change.
char s[sizeof format + sizeof(int)*3 + 3];
sprintf(s, format, i);
printf("printf s = [%s]",s);
我喜欢使用sizeof(some_integer_type)*3 + 3
来计算整数类型上所有排序所需的内存。
(注:我假设CHAR_BIT == 8
作弊)