关于数组记录值的问题,前面还能打出来可红色部分为什么不能记录myargv的值!!

tropicscsdn 2009-07-21 10:14:32
rt:关于数组记录值的问题,前面蓝色部分还能在文件中打出来数组和token的值,可红色的2个部分就不能记录数组myargv的值了,这个是为什么呀????!!
——————————————————————————————————————————————
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

#define ARRSIZE 10
#define MAXSIZE 1024
#define PROMPT "$ "
char *myargv[1024];
int main(int argc, char *argv[])
{
int i;
char buf[MAXSIZE];
if ((fp = fopen("./record.txt","w"))==NULL){
// 打不开
perror("打不开");
exit(EXIT_FAILURE);
}

printf(PROMPT);
while (fgets(buf,MAXSIZE,stdin) != NULL ){
int tail = strlen(buf)-1;
char seps[]=" ";
char *token;

if (buf[tail] =='\n'){
buf[tail]='\0';
}

if (strcmp("exit",buf)==0){
break;
buf[tail] = '\0';
fclose(fp);
return 0;
}


int imyarr=0;
char tmpbuf[MAXSIZE];
myargv[0]='\0';
tmpbuf[0]='\0';
int iarr =0;
for (i=0;i<=tail;i++){
if(buf[i]==' ' || buf[i]== '\0'){
tmpbuf[iarr]='\0';
if(tmpbuf[0]!='\0'){
token = tmpbuf;
myargv[imyarr]= token;
fprintf(fp,"myargv[%d]=[%s]\n",imyarr,myargv[imyarr]);
imyarr++;

tmpbuf[0]='\0';
token =NULL ;
iarr =0;
}else{
tmpbuf[iarr]=buf[i];
iarr++;
}
}
myargv[imyarr]='\0';
for(i=0;i<ARRSIZE;i++) {
if(argv[i]=='\0'){
fprintf(fp,"checktest[%d]=break\n",i);
break;
}
fprintf(fp,"myargv[%d]=[%s]\n",imyarr,myargv[0]);
}

exec_cmd();
printf(PROMPT);
}
fclose(fp);
return 0;
}

int exec_cmd()
{

for(i=0;i<ARRSIZE;i++) {
if(argv[i]=='\0'){
fprintf(fp,"checktest[%d]=break\n",i);
break;
}
fprintf(fp,"myargv[%d]=[%s]\n",i,myargv[i]);

}
return 0;
}
...全文
50 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tropicscsdn 2009-07-22
  • 打赏
  • 举报
回复
恩,解决了,哈哈,谢谢,确实是需要memcpy来解决,指针的问题。

char myargv[20][1024];
memcpy( myargv[imyarr] , token ,sizeof(token) )
tinamengal 2009-07-22
  • 打赏
  • 举报
回复
行了就给点分
tinamengal 2009-07-22
  • 打赏
  • 举报
回复
char myargv[ARRSIZE][MAXSIZE];

int main(int argc, char *argv[])
{
int i;
char buf[MAXSIZE];
if ((fp = fopen("./record.txt","w"))==NULL){
// 打不开
perror("打不开");
exit(EXIT_FAILURE);
}

printf(PROMPT);
while (fgets(buf,MAXSIZE,stdin) != NULL ){
int tail = strlen(buf)-1;
char seps[]=" ";
char *token;

if (buf[tail] =='\n'){
buf[tail]='\0';
}

if (strcmp("exit",buf)==0){
break;
buf[tail] = '\0';
fclose(fp);
return 0;
}


int imyarr=0;
char tmpbuf[MAXSIZE];
myargv[0]='\0';
tmpbuf[0]='\0';
int iarr =0;
for (i=0;i <=tail;i++){
if(buf[i]==' ' || buf[i]== '\0'){
tmpbuf[iarr]='\0';
if(tmpbuf[0]!='\0'){
token = tmpbuf;
memcpy( myargv[imyarr],token,sizeof(token));
fprintf(fp,"myargv[%d]=[%s]\n",imyarr,myargv[imyarr]);
imyarr++;

tmpbuf[0]='\0';
token =NULL ;
iarr =0;
}else{
tmpbuf[iarr]=buf[i];
iarr++;
}
}
myargv[imyarr]='\0';
for(i=0;i <ARRSIZE;i++) {
if(argv[i]=='\0'){
fprintf(fp,"checktest[%d]=break\n",i);
break;
}
fprintf(fp,"myargv[%d]=[%s]\n",imyarr,myargv[0]);
}
exec_cmd();
printf(PROMPT);
}
fclose(fp);
return 0;
}

int exec_cmd()
{
for(i=0;i <ARRSIZE;i++) {
if(argv[i]=='\0'){
fprintf(fp,"checktest[%d]=break\n",i);
break;
}
fprintf(fp,"myargv[%d]=[%s]\n",i,myargv[i]);

} return 0;
}
tropicscsdn 2009-07-22
  • 打赏
  • 举报
回复
如果执行语句是: ls rt 的话
tropicscsdn 2009-07-22
  • 打赏
  • 举报
回复
蓝色部分的执行结果如果是:
myargv[0]=[ls]
myargv[1]=[rt]
红色部分的执行结果都是:
myargv[0]=[]
myargv[1]=[]
tropicscsdn 2009-07-22
  • 打赏
  • 举报
回复
我已经把程序给定义了,你看得是之前的版本~~~~
brookmill 2009-07-21
  • 打赏
  • 举报
回复
楼主的代码不对呀,编译都通不过。
myargv没定义,而且main少了个大括号

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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