gpt4 book ai didi

c - 在字符指针数组中打印元素时未确定的行为?

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:12 27 4
gpt4 key购买 nike

我正在尝试解析输入以将其分成命令和参数,我可以拆分,但是当我尝试分配到包含多个字符串的数组时出现问题。例如:

cmd1<infile |cmd2 -a -b -c|cmd3 -x -y -z>outfile

进入带有参数的命令,拆分是可以的,但最后当我打印我的数组时它没有显示正确的输出,我无法理解 char* 在 c 中的工作。

#include<stdio.h>
#include<conio.h>
#include<malloc.h>

char* Getfile(char *input,int flag)
{
int i,k;
char *file;
//printf("\n++++++++++++++++++++++++++");
//puts(input);
if(strcmp("exit",input)==0)
exit(0);

for(i=0;input[i]!='\0';i++)
{
if(flag==0 && input[i]=='<')
break;
else if(flag==1 && input[i]=='>' )
{
if(input[i-1]!='2')
break;
else if(input[i-1]=='2' && input[i-2]!=' ' )
break;
}
else if(flag==2 && input[i]=='>' && input[i-1]=='2' && input[i-2]==' ' )
break;
}//for

if(input[i]==NULL)
return NULL;

i++;

//cmd f1 2>f2
for(k=0;input[i]!='>' && input[i]!='<'&& input[i]!=NULL ;i++,k++)//dont include ' ' cond otherwise cmd< f1 will not work
{
if(input[i]==' ' && input[i+1]=='2' && input[i+2]=='>')
break;

file[k]=input[i];
// printf("\n %d %c",i,input[i]); // getch();
}
file[k]=NULL;

// printf("\n return file%d is \n",flag);
// puts(file);
//getch();
return file;
}//function
//--------------------------------------------------------
char *Getcommand(char *input)
{
char *cmd;
int i,k;
for(k=0,i=0;input[i]!='>' && input[i]!='<'&& input[i]!=NULL;i++,k++)
{
cmd[k]=input[i];
//printf(" %c",cmd[k]);
}//for
if(input[i]=='>' && input[i-1]=='2' &&input[i-2]==' ' )
cmd[k-2]=NULL;
cmd[k]=NULL;

//printf("\ncommand is");
// puts(cmd);
// getch();;
return cmd;
}
//-------------------------------------------------------


void main()
{
/*
char *args[10][20]={
{"ls","-a","-i",(char*)NULL},
{"sort",(char*)NULL},
{"wc","-c",(char*)NULL}
}; */

char *args[10][20],*input,*commands[10],*temp[10];
int i=0,k=0,noc=-1;
char *inputcopy,*inputcopy2,*inputfile,*outputfile,*errorfile[10];
clrscr();
//------------
printf("enter string\n");
gets(input);
strcpy(inputcopy,input);
commands[0]=strtok(inputcopy,"|");

for(i=0;commands[i]!=NULL;)
{ commands[++i]=strtok(NULL,"|");
}
noc=i-1; //no of commands brgin from 0

strcpy(inputfile,Getfile(commands[0],0));
strcpy(outputfile,Getfile(commands[noc],1));

i=0;
while(i<=noc)
{
strcpy(inputcopy,Getcommand(commands[i]));
k=0;
//----
args[i][k]=strtok(inputcopy," ");
while(args[i][k]!=NULL)
args[i][++k]=strtok(NULL," ");
//------- immediate printing show args[i][k] has correct value :/ -----------
for(k=0;args[i][k]!=NULL;k++)
printf("\n --args[%d][%d]= %s ",i,k,args[i][k]);
// getch();
//-----
i++;
}
//---------
printf("\n outputfile=%s",outputfile);
printf("\n inputfile=%s",inputfile);
//===========but here actual printing is not showing correct output=====
i=0;
while(i<=noc)
{
printf("\n**********comands no %d *******",i);
for(k=0;args[i][k]!=NULL;k++)
printf("\n args[%d][%d] %s ",i,k,args[i][k]);

getch();
i++;
}

//------
getch();

}//main

最佳答案

您声明了 char *File 但没有为其分配任何空间。您正在尝试将内容复制到一个数组中,该数组仅指向内存中的某个空间然后扩展它,我相信这是未定义的行为。使用 malloc/calloc 为其创建空间。

    file = (char * ) malloc(sizeof(char) * maxLength);

在您定义数组的 maxLength 的位置,然后在您的 for 循环中复制内容。

   for(k=0;input[i]!='>' && input[i]!='<'&& input[i]!=NULL && k < maxLength ;i++,k++)//dont include ' ' cond otherwise cmd< f1 will not work
{
if(input[i]==' ' && input[i+1]=='2' && input[i+2]=='>')
break;

file[k]=input[i];
// printf("\n %d %c",i,input[i]); // getch();
}

关于c - 在字符指针数组中打印元素时未确定的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19552047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com