【发布时间】:2015-05-02 13:28:12
【问题描述】:
我有以下代码:
bool get_command(char *cmd){
char *cm = (char*)malloc(strlen(cmd));
strcpy(cm,cmd);
const char *tok = strtok(cm," ");
if(!tok)
return false;
if(!strcmp(tok,"MULTIPLY"))
{
printf("WORKING!\n");
return true
}
....
int main(void){
while(1){
char *input = NULL;
char buf[MAX_LINE_LENGTH] = {0};
int read;
size_t len;
read = getline(&input, &len, stdin);
if (-1 != read){
printf("Input: %s\n", input);
sprintf(buf, "%s", input);
get_command(input);
} else {
printf("No line read\n");
}
free(input);
}
return 0;
}
当我运行代码并输入 MULTIPLY 时,它会返回
输入:乘法
代币:倍增
但是这不会打印出WORKING。谁能解释为什么这不能按预期工作?
【问题讨论】:
-
在
strtok调用后尝试打印tok。 -
@tivn tok 与 input 相同,应该调用 printf 函数但不起作用
-
tok是否等于"MULTIPLY\n"? -
@D.Shawley 不是!我是从酷哥的评论中发现的!
-
从get_command()返回之前,需要调用'free(cm)'否则代码会出现内存泄漏
标签: c string malloc getline strlen