изменить данные массива char - PullRequest
0 голосов
/ 05 июня 2010

у меня есть массив типа char

char *arg[100]

этот массив считывает данные откуда-то, когда, когда я печатаю arg[0], он печатает значение "help", а когда я печатаю arg[1], он печатает значение "exit" .. в качестве примера

что я точно хочу, это изменить arg[0] с «помощи» на что-то еще, например «человек»

как я могу это сделать ???

спасибо

код:

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 голосов
/ 05 июня 2010

это должно поместить что-то еще в: -

strcpy(arg3[0], "blah");

, кипя ваша функция прямо вниз, это прекрасно скомпилировано для меня: -

int executeCommands(char arg31[])
{           
    char *arg3[10]; 

    arg3[0] = arg31;

    strcpy(arg3[0], "blah");
    return 0;
}
0 голосов
/ 05 июня 2010

Таким образом, массив указывает на токены в другой строке.Вы не должны копировать новое значение в этот буфер, потому что новое значение может быть длиннее старого и вы не хотите перезаписывать следующий токен.

Если новое значение будет литералом, напримерman "вы можете просто сделать это:

arg3[0] = "man";

Если новым значением будет переменная строка, то что-то вроде этого:

char newToken[64];
newToken[sizeof(newToken)-1] = 0;
strncpy(newToken, "whatever", sizeof(newToken)-1);
arg3[0] = newToken;
0 голосов
/ 05 июня 2010

Вероятно, у вас есть char *arg[100];

Вы можете сделать это с:

strncpy(arg[0], "man", sizeof(256));

Где 256 - количество байтов, выделенных в памяти за этим указателем. Я думаю, что у вас есть другое значение выделенных байтов.

Вы можете сделать это также с помощью этого кода:

arg[0] = (char*)"man";

Но во втором примере вы не очень хорошо переводите с const char* на char*

...