更改char数组的数据

时间:2010-06-04 21:31:44

标签: c string arrays char

我有一个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);
        } 

3 个答案:

答案 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;