execvp后输出一些怪东西

littleubuntu 2012-08-06 03:08:39

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define MAXARGS 20
#define MAXARGLEN 100

static void execute(char *arglist[]);
static char* makestring(char *argbuf);

int main()
{
int numargs = 0;
char *arglist[MAXARGS + 1];
char argbuf[MAXARGLEN];


while(numargs < MAXARGS)
{
printf("Arg[%d] : ", numargs);
if(fgets(argbuf, MAXARGLEN, stdin) != NULL && argbuf[0] != '\n')
{
arglist[numargs++] = makestring(argbuf);
}
else
{
execute(arglist);
arglist[numargs] = NULL;
numargs = 0;
}
}
}

static void execute(char *arglist[])
{
if(execvp(arglist[0], arglist) == -1)
{
perror("execvp failed");
exit(1);
}
}

static char *makestring(char *argbuf)
{
char *cp;

if(argbuf == NULL)
return NULL;

argbuf[strlen(argbuf) - 1] = '\0';

cp = malloc(strlen(argbuf) + 1);
if(cp == NULL)
{
fprintf(stderr, "No enough memory");
exit(1);
}

strcpy(cp, argbuf);
return cp;
}


编译: gcc -o lsh1 lsh1.c
运行 ./lsh1
Arg[0] : ls
Arg[1] : /etc/apt/
Arg[2] : 回车
ls: 无法访问�����A�: 没有那个文件或目录
ls: 无法访问�: 没有那个文件或目录
ls: 无法访问: 没有那个文件或目录
ls: 无法访问{p�: 没有那个文件或目录
/etc/apt/:
apt.conf.d sources.list sources.list_back sources.list.distUpgrade trustdb.gpg trusted.gpg~
preferences.d sources.list~ sources.list.d sources.list.save trusted.gpg trusted.gpg.d

在英文版的系统上一切正常,但是中文版的ubuntu下会出现那些无法访问的提示,这是怎么回事啊
...全文
53 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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