我有char *返回值的功能问题
我的功能是
char * GetUnreadMessageIndexes(char * input)
{
char index [10];
int i=0;
while(*input != ':')
{
input++;
}
input++;
while(*input != ',')
{
if(*input != ' ')
{
index[i]= *input;
i++;
}
input++;
}
return index;
};
我的主要测试代码是
char * b = "+CMGL:26867689, \"REC READ\",\"+81923733737\", \n test again ";
char * a = GetUnreadMessageIndexes(b);
while(a != ((int)a + (int) strlen(a)))
{
printf("%c",*a);
a++;
}
这个函数假设在+ CMGL之后解析数字串:之前, 我得到的第一个数字只是“2”而其他值是意外的值而不正确
答案 0 :(得分:2)
您正在传回指向堆栈上存在的变量(“index”)的指针。离开函数后,堆栈将展开,指针将指向已被堆栈中的任何新数据覆盖的内容。
答案 1 :(得分:1)
index
是函数的本地函数(因为它是堆栈的一部分),一旦函数退出,它可能会被清除,也可能不会被清除。目标存储器指向不一定必须具有原始值,并且/将/将在其他地方使用。
答案 2 :(得分:1)
数组index
是函数GetUnreadMessageIndexes
的局部变量,一旦执行结束,index
就不再存在了。使用指针并使用char
为malloc
分配10 char index[0];
的内存。
替换:
char *index = malloc(10);
使用:
strlen
此外,您需要null终止数组,否则while(*input != ',')
{
if(*input != ' ')
{
index[i]= *input;
i++;
}
input++;
}
index[i] = '\0';
将无法正常使用它:
while
由于现在数组为空终止而不是使用printf("%s", a);
循环来打印结果数组,只需使用:
{{1}}
现在您的代码按预期工作:Live Demo