我想实现UNIX类型的shell。我还没有实现shell创建一个子进程来运行每个命令部分,但这只是一个代码,用于将用户在命令提示符下输入的字符串分隔为合适的参数,并将空格作为分隔符,然后传递给与该命令相对应的文件(比如ls -l)作为命令行参数。模拟UNIX类型的shell
它在我的Windows 7操作系统上运行正常,但是当我在Ubuntu上运行它并输入字符串为“ABC XYZ WGH”时,出现错误,说“Undefined symbol'printf'version ABC。” 请帮我理解,我哪里出错了?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int arguments(char str[],char *** args)
{
char *s;
int num;
int i;
s=(char*)calloc(strlen(str)+1,sizeof(char));
strcpy(s,str);
if(strtok(s," ")==NULL)
num=0;
else
{
num=1;
while(strtok(NULL," ")!=NULL)
num++;
}
strcpy(s,str);
**args=strtok(s," ");
if(num)
{
for(i=1;i<num;i++)
*((*args)+i)=strtok(NULL," ");
}
return num;
}
int main()
{
char buffer[256];
char **arg;
int args;
int i;
while(true)
{
gets(buffer);
if(!strcmp(buffer,"STOP"))
break;
args=arguments(buffer,&arg);
printf("%d\n",args);
for(i=0;i<args;i++)
printf("%s\n",arg[i]);
}
return 0;
}
[不投的标准分配函数的返回值(http://stackoverflow.com/questions/605845/do-i-cast-在对结果的-的malloc/605858#605858)。 – 2014-01-23 15:20:43
您是否可以复制并粘贴确切的错误消息,以及您在终端键入的任何命令? –
在ubuntu上编译过吗?你正在使用哪个编译器? – Dipto