我做了这个功能:
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
为什么?
答案 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()函数。