一个简单的c语言强制转换问题
我是想不用#include <stdio.h>里面的库函数将int型变量赋值给一个char* 变量
我的代码如下
#include <string.h>
#include <stdio.h>
int main()
{
int val = 12;
char *first;
//first = (char *)malloc(sizeof(char) * 10);
first = (char *)val;
printf("*****\n");
printf("****first = %s***\n",first);-----------段错误
//free(first);
return 0;
}
编译没问题 一旦运行就会出现段错误,并且将标记段错误的那句话注释掉就不会有什么问题,各位大神这到底为什么呢? c 类型强制转换
[解决办法]
first = (char *)val;
val是int型,是一个数。
char *是一个指针。
不能直接把一个数转换成一个地址。
输出的时候访问了非法的地址,就变段错误了
[解决办法]
int val = 12;
first = (char *)(val);是把first指向内存地址为12的内存,这段内存你是访问不了的,所以段错误。
first = (char *)(&val);是把first指向val所占的内存地址,你用%s打印,ascii中12为非打印字符。