【发布时间】:2013-12-24 11:16:17
【问题描述】:
我有以下方法
void set_actions(char *input, char **actions)
{
int index = 0;
char *str = (char*)malloc(strlen(input));
strcpy(str,input);
char *tok = NULL;
tok = strtok(str," ");
while(tok!=NULL)
{
actions[index]=tok;
tok=strtok(NULL," ");
index++;
}
free(str);
}
在main中调用这个方法后像:
char *input ="A B C";
char *actions[3];
set_actions(input, actions);
结果是:
actions[0] = is empty
actions[1] = is empty
actions[2] = C
如果我删除“free(str)” 那么
actions[0] = A
actions[1] = B
我做错了什么?
【问题讨论】:
-
阅读
strtok的手册并弄清楚它的返回值是什么意思。 -
除了Kerrek的观点,还需要为空终止符分配空间-
char *str = malloc(strlen(input)+1); -
发布后不要引用该区域。
-
请记住,在 free() 它们之后不要访问内存,任何事情都可能发生,你不应该这样做。仅当您确定它们将不再被使用时才执行 free()。
标签: c string memory-management strtok