Я пытаюсь реализовать оболочку типа UNIX. Я не реализовал оболочку, создающую дочерний процесс для запуска каждой части команды, но это всего лишь код, чтобы сломать строку, введенную в командной строке пользователем, в соответствующие аргументы, используя пробел в качестве разделителя, который затем будет передается в файл, соответствующий команде (например, ls -l) в качестве аргументов командной строки.Имитация оболочки типа UNIX
Это нормально работает на моей ОС 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;
}
[не отбрасывают возвращаемое значение стандартных функций Allocator] (http://stackoverflow.com/questions/605845/do-i-cast- заместитель на результат из-таНоса/605858 # 605858). –
Можете ли вы скопировать и вставить точное сообщение об ошибке вместе с любой командой, введенной вами на терминале? –
компилируется ли он на ubuntu? какой компилятор вы используете? – Dipto