char *函数返回值

时间:2014-01-22 23:05:33

标签: c

我有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”而其他值是意外的值而不正确

3 个答案:

答案 0 :(得分:2)

您正在传回指向堆栈上存在的变量(“index”)的指针。离开函数后,堆栈将展开,指针将指向已被堆栈中的任何新数据覆盖的内容。

答案 1 :(得分:1)

index是函数的本地函数(因为它是堆栈的一部分),一旦函数退出,它可能会被清除,也可能不会被清除。目标存储器指向不一定必须具有原始值,并且/将/将在其他地方使用。

答案 2 :(得分:1)

数组index是函数GetUnreadMessageIndexes的局部变量,一旦执行结束,index就不再存在了。使用指针并使用charmalloc分配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