关于从数组中分离单词

cdkrrr 2010-08-17 05:35:19

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX_ARG 10

struct command_struct
{
char *name;
char *argv[MAX_ARG];
};

int split(char *buf,struct command_struct *com,int *num);

int main(void)
{
struct command_struct com;
char buf[256];
int num;

printf("\n[myftp]$");

memset(buf, '\0', sizeof(buf));/*init buf*/

if(NULL==fgets(buf,256,stdin))
{
perror("fgets error");
exit (1);
}

split(buf,&com,&num);

return 0;
}

int split(char *buf,struct command_struct *com,int *num)
{
char array[256];
int flag=0;
int i=0,n=0,t=0;

memset(array,'\0',sizeof(array));

for(n=0;n<strlen(buf);n++)
{
if(buf[n]!=' '&&buf[n]!='\t'&&buf[n]!='\n')
{
array[i++]=buf[n];
flag=1;/*在单词中*/
}
else if(flag=1&&(buf[n]==' '||buf[n]=='\t'||buf[n]=='\n'))
{
array[i]='\0';
strcpy(com->argv[t],array);
printf("%s ",com->argv[t]);
t++;
if(t>9)
{
exit(1);
}
memset(array,'\0',sizeof(array));
i=0;
flag=0;/*不在单词中*/
}
else
{
;
}

}

com->name=com->argv[0];

return 0;
}


请高人运行一下这段代码,指点一下菜鸟。

这段代码事项把输入的单词提取到struct command_struct com 中。可是在linux下面运行报段错误。在windows下运行,

好像只能分辨出3个单词,输入多了就报错。
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdkrrr 2010-08-17
  • 打赏
  • 举报
回复

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX_ARG 10

struct command_struct
{
char *name;
char *argv[MAX_ARG];
};

int split(char *buf,struct command_struct *com,int *num);

int main(void)
{
struct command_struct com;
char buf[256];
int num;
int i=0;
printf("\n[myftp]$");

memset(buf, '\0', sizeof(buf));/*init buf*/

if(NULL==fgets(buf,256,stdin))
{
perror("fgets error");
exit (1);
}



split(buf,&com,&num);

//printf("\n%s %s %s %s",com.argv[0],com.argv[1],com.argv[2],com.argv[3]);

printf("\n%d",num);

for(;num>=0;num--)
{
printf("%s ",com.argv[i++]);
}

return 0;
}

int split(char *buf,struct command_struct *com,int *num)
{
char *array=NULL;
int flag=0;
int i=0,n=0,t=0;
int len=strlen(buf);

if(len<=1)
{
printf("The first arg can't only '\\n'!");
exit (1);
}

for(n=0;n<len;n++)
{
if(buf[n]==' '||buf[n]=='\t'||buf[n]=='\n')
{
buf[n]='\0';
flag=0;
}
if(buf[n]!='\0' && flag==0)
{
if(t<=9)
{
com->argv[t]=&buf[n];
flag=1;
t++;
}
else
{
printf("argument too much!\n");
exit (1);
}
}
}

*num=t-1;

com->name=com->argv[0];

return 0;
}



自己捣鼓了一下......

继续求高人指点。
cdkrrr 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kostion 的回复:]
strcpy(com->argv[t],array);
这一行,com的成员argv没有分配空间
[/Quote]

我想让com->argv[t]直接指向buf[n]中的单词首字符,然后将其后的一个空格变成'\0';

可是我不知道怎么写....

可否帮忙修改一下?
kostion 2010-08-17
  • 打赏
  • 举报
回复
strcpy(com->argv[t],array);
这一行,com的成员argv没有分配空间

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧