Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504466
  • 博文数量: 68
  • 博客积分: 5011
  • 博客等级: 大校
  • 技术积分: 806
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-30 22:06
文章分类
文章存档

2011年(1)

2009年(8)

2008年(59)

我的朋友

分类: C/C++

2008-03-23 16:48:07

/*程序能运行正常,在结尾总会有个段错误,我怀疑是指针越界或内存没有释放*/
/*请高手指点,一定帮我修改,我郁闷两天了*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include"errno.h"
typedef enum Boolean{FALSE,TRUE}boolean;
typedef struct shell_command
{
    char  *full_cmd;    /*取得的命令行命令*/
    char  *cmd;     /*取得full_cmd中的命令*/
    int    args;     /*full_cmd中命令的参数的个数*/
    char **argv;     /*取得full_cmd中的参数*/
    char  *cmd_path;    /*取得命令要执行的文件*/
   int  is_input_redirect;  /*是否有输入重定向*/
  int  is_output_redirect; /*是否有输出重定向*/
  int  is_pipeline;    /*是否有管道*/
   int   is_backgroud;    /*是否有后台运行*/
}*command;
int makeargv(const char*s, const char*delimiters,char ***argvp);
int split_command(command  cmd);
int  split_command(command  cmd)
{
int  i; 
char delim[]=" ";
  if((cmd->args=makeargv(cmd->cmd,delim,&cmd->argv))==-1)
 {
   printf("error for s%\n",cmd->argv[1]); 
 return 1;
  }
for(i=0;iargs;i++)
  printf("%d:%s\n",i,cmd->argv[i]);
 return cmd->args;
}
int makeargv(const char*s, const char*delimiters,char ***argvp)
{
int i;
 int numtokens;
const char * snew;
char *t;
if(s==NULL||delimiters==NULL||argvp==NULL)
 { 
 return -1;
}*argvp=NULL;
snew=s+strspn(s,delimiters);
if((t=new char [strlen(snew)+1)]==NULL)
return -1;
 strcpy(t,snew);
numtokens=0;
if(strtok(t,delimiters)!=NULL)
  for(numtokens=1;strtok(NULL,delimiters)!=NULL;numtokens++)
   if((* argvp=new char [numtokens+1])==NULL)
   {
    free(t);
   return -1;
   }
       if(numtokens==0) 
free(t);
  else
  {  
strcpy(t,snew);
                       **argvp=strtok(t,delimiters);
                      for(i=1;i    *(*(argvp)+i)=strtok(NULL,delimiters);
   }   *((*argvp)+numtokens)=NULL;
    return numtokens;
 }
main()
{
command cmd;
int num;
int i;
cmd->cmd="123  @#$  456";
cmd->full_cmd="123  @#$  456"/*目的是把字符串"123  @#$  456"分割成每个单词,并用args统计单词个数*/
cmd->args=0;                                           /*用二重指针argv指向每个单词*/
cmd->argv=NULL;
cmd->cmd_path=NULL;
cmd->is_input_redirect=0;
cmd->is_output_redirect=0;
cmd-> is_pipeline=0;
cmd->is_backgroud=0;
num=split_command( cmd );
printf("%d\n",num);
 for(i=0;iargs;i++)
 printf("%d:%s\n",i,cmd->argv[i]);
}
/*但是程序能运行正常,在结尾总会有个段错误,我怀疑是指针越界或内存没有释放*/
阅读(2384) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:current宏的作用

给主人留下些什么吧!~~

chinaunix网友2008-07-14 16:17:24

这里的问题,已经找出来了, typedef struct shell_command { ...... }*command; 把command改成command就可以了