我使用select()
來知道我什麼時候必須從stdin讀取。我調用這個函數:如何解析C中的標準輸入?
void
CLI()
{
char *line=(char*)malloc(sizeof(char)*32);
char *cmd=(char*)malloc(sizeof(char)*16);
char *arg1=(char*)malloc(sizeof(char)*8);
char *arg2=(char*)malloc(sizeof(char)*8);
while(fgets(line, sizeof(line), stdin) != NULL)
{
cmd=strtok(line," \n\r\t");
arg1=strtok(NULL," \n\r\t");
arg2=strtok(NULL," \n\r\t");
if(cmd==NULL) break;
printf("cmd=%s, arg1=%s, arg2=%s",cmd,arg1,arg2);
}
free(line);
free(cmd);
free(arg1);
free(arg2);
}
輸入的例子:#set PAR 0
我能得到什麼:
*** Error in './myprogram': double free or corruption (fasttop): 0x0000000001cc70f0 ***
我在做什麼錯?
標準警告:請[不要轉換](http://stackoverflow.com/q/605845/2173917)'malloc()'和家族在'C'中的返回值。 –
而不是鑄造它,你必須檢查它不是'NULL'。 –
不要'malloc''cmd','arg1'和'arg2'作爲'strtok'返回'char *'。 –