我有一个char
类型的数组char *arg[100]
这个数组从某处读取数据,当我打印arg[0]
时,它打印值“help”,当我打印arg[1]
时,它打印值“exit”。作为一个例子
我想要的是将arg[0]
从“帮助”更改为其他任何内容,例如“man”
我怎么能这样做?
谢谢
代码:
int executeCommands(char arg31[])
{
pid_t pid;
int status,number;
char *arg3[10];
//char str2[21];
x = 0;
arg3[x] = strtok(arg31, " \n\t");//this line to tokenize every commands and its arguments from the passed array of chars (which is the command)
while(arg3[x])
arg3[++x] = strtok(NULL, " \n\t");
if(NULL!=arg3[0])
{
if(strcasecmp(arg3[0],"cat")==0) //done
{
int f=0,n;
char l[1];
struct stat s;
if(x!=2)
{
printf("Mismatch argument\n");
return 0;
}
else if(strcmp(arg3[0],"help")==0) // done
{
if (strcmp(arg3[1],"cat")==0)
printf("1");
else if(strcmp(arg3[1],"rm")==0)
printf("1");
else if(strcmp(arg3[1],"rmdir")==0)
printf("1");
else if(strcmp(arg3[1],"ls")==0)
printf("1");
else if(strcmp(arg3[1],"cp")==0)
printf("1");
else if(strcmp(arg3[1],"mv")==0)
printf("1");
else if(strcmp(arg3[1],"hi")==0)
printf("1");
else if(strcmp(arg3[1],"exit1")==0)
printf("1");
else if(strcmp(arg3[1],"sleep")==0)
printf("1");
else if(strcmp(arg3[1],"history")==0)
printf("1");
else if(strcmp(arg3[1],"type")==0)
printf("1");
else
{ char manarg[] = "man\t";
arg3[0] = strtok(manarg, " \n\t");
executeCommands(arg3);
}
writeHistory(arg3);
}
答案 0 :(得分:0)
可能你有char *arg[100];
你可以这样做:
strncpy(arg[0], "man", sizeof(256));
其中256是在该指针后面的内存上分配的字节数。 我认为你有分配字节的其他值。
您也可以使用此代码执行此操作:
arg[0] = (char*)"man";
但是在第二个示例中,您没有很好地从const char*
转换为char*
答案 1 :(得分:0)
这应该包含其他内容: -
strcpy(arg3[0], "blah");
直接煮你的功能,这对我来说很好: -
int executeCommands(char arg31[])
{
char *arg3[10];
arg3[0] = arg31;
strcpy(arg3[0], "blah");
return 0;
}
答案 2 :(得分:0)
因此数组指向另一个字符串中的标记。您不应将新值复制到该缓冲区中,因为新值可能比旧值长,并且您不想覆盖下一个标记。
如果新值是文字,如“man”,你可以这样做:
arg3[0] = "man";
如果新值是变量字符串,那么这样的话:
char newToken[64];
newToken[sizeof(newToken)-1] = 0;
strncpy(newToken, "whatever", sizeof(newToken)-1);
arg3[0] = newToken;