C字符串问题

时间:2011-05-15 17:04:06

标签: c

我做了这个功能:

char** parse_cmd(const char* cmdline) {
    int i;
    int j = 0 ,k = 0;
    char ch[100][100];
    for(i=0; i<strlen(cmdline); i++) {
        if(cmdline[i] != ' ') {
            ch[j][k] = cmdline[i];
            k++;
        } else {
            j++;
            k = 0;
        }
    }

    return ch;
}

但是当我编译程序时,我有这个警告:

shell.c: In function ‘parse_cmd’:
shell.c:25:2: warning: return from incompatible pointer type
shell.c:25:2: warning: function returns address of local variable

为什么?

3 个答案:

答案 0 :(得分:3)

你正在返回一个指向堆栈中存在的内存的指针。请改用堆分配的内存。

答案 1 :(得分:3)

尝试返回指向内存位置的指针,该指针在返回函数后不会与数组关联。如果要永久分配内存,则必须在返回之前使用malloc(或任何类似函数)进行复制。

e.g:

char** parse_cmd(const char* cmdline) {
int i;
int j = 0 ,k = 0;
char **ch = (char**)malloc(100*100);
for(i=0; i<strlen(cmdline); i++) {
    if(cmdline[i] != ' ') {
        ch[j][k] = cmdline[i];
        k++;
    } else {
        j++;
        k = 0;
    }
}
return ch;
}
编辑:修正了拼写错误。感谢名单

答案 2 :(得分:2)

ch函数在函数末尾被释放,该内存存储在堆栈中,该函数返回后无效。您应该在调用函数中创建一个数组,并将指针传递给parse_cmd()函数。