读书人

字符转换和内存有关问题

发布时间: 2012-03-09 16:54:57 作者: rapoo

字符转换和内存问题
void str_dess(char *source, char *dest, char *in_key, int flg )

char *source= "12345678 ";
char *dest;
char *key= "nb2031nb ";
int i=0;
str_dess(source,dest,key,i);
内存出错为什么???

还有为什么不能unsigned char *source= "12345678 ";
vc6会报错




[解决办法]
你那个dest指针没有初始化,再往那里写值的话,当然就会出错了
[解决办法]
unsigned char* source = "12345678 ";
-----
编译器会把 "12345678 "存储在静态存储区,并返回首地址char*

str_dess函数做什么操作?
[解决办法]
楼上的正解
[解决办法]
dest是个悬空指针,你往这个地址拷贝就会出错.

--------------------------------------------------


还有为什么不能unsigned char *source= "12345678 ";

这个是类型不匹配, "12345678 "默认为char*行,赋值给unsigned char*时就会类型不匹配.
编译时应该给出一个警告吧.
改成这样看看
unsigned char *source=(unsigend char*) "12345678 ";


[解决办法]
楼上正解~

[解决办法]
你可以将char * dest
改成char * dest[]
[解决办法]
你的dest指针并没有开辟内存空间,就往里面写入了数据,会写到非法的内存区,而报内存错误.

可以这样:

char *dest=new char[strlen(source)+1]; //分配内存空间


另外

unsigned char *source= "12345678 ";

当然是不行的,因为字符串的返回类型是char*,你这样赋值是类型不匹配

读书人网 >C语言

热点推荐