急!unsigned char*返回值不正确
小弟刚接触C不久,烦各位帮忙看看下列代码哪里有问题,怎么返回值(D)不正确.
谢谢各位了.
#include <iostream>
#include <string.h>
#include <stdio.h>
//unsigned char* myanwser();
static const unsigned char* myanwser()
{
int i,j;
unsigned char A[6]= "abcd\n ";
unsigned char* B;
//for(int i=0;i <5;i++)
//{
// printf( "A: %c\n ",A[i]);
//B++;
//}
//unsigned char* B;
//B=A;
/*for(j=0;j <5;j++)
{
printf( "B: %c\n ",*B);
B++;
}*/
B=A;
return B;
}
int main()
{
int j;
unsigned char* D;
//D=(unsigned char*)malloc(5);
//memcpy(D,(unsigned char*)myanwser(),5);
//D=(unsigned char*)myanwser();
D=(unsigned char*)myanwser();
for(j=0;j <5;j++)
{
printf( "C: %c\n ",*D);
D++;
}
return 0;
}
[解决办法]
哎,又是返回栈中变量错误。
[解决办法]
unsigned char* D;要定义为
const unsigned char* D;
[解决办法]
不是, 不能赋值
把你myanwser()函数的const 去掉
[解决办法]
return语句返回指向“栈内存”的指针,因为该内存在函数结束时自动消亡
[解决办法]
static const char* myanwser()
{
int i,j;
char A[6]= "abcd\n ";
char* B;
B= "abcd\n ";
return B;
}
改为这个的话,能成功
因为myanwser内的“abcd\n”是常量字符串,位于静态存储区,它在程序生命期内恒定不变。无论什么时候调用myanwser,它返回的始终是同一个“只读”的内存块。