2010-06-04 3 views
0

У меня есть массив типа полукоксаизменить данные массив символов

char *arg[100] 

этот массив его читает данные из где-то, когда, что, когда я печать arg[0], он печатает значение «помощь», и когда я печатать arg[1], он выводит значение «выхода» .. как пример

то, что я хочу именно изменить 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); 
     } 
+1

Вы уверены, что не имеете в виду 'char * arg [100]'? –

+0

Это единственная строка - массив одиночных символов. Вы имели в виду char arg [10] [100]? –

+0

Простите, что его * arg [100] –

ответ

0

это должен поставить что-то другое: -

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

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

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

    arg3[0] = arg31; 

    strcpy(arg3[0], "blah"); 
    return 0; 
} 
+0

примечание: ожидается 'char *', но аргумент имеет тип 'char **' это ошибка, которую я получаю: S –

+0

arg3 - символ ** arg3 [0 ] является char * и arg3 [0] [0] является char –

+0

ошибка находится в строке 120, которая является строкой объявления функции executeCommands. –

0

Propably у вас есть char *arg[100];

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

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

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

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

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

Но во втором примере вы не хорошее преобразование из const char* в char*

+0

Я попробовал его, его не работает .. ошибка strncpy (arg [0], «man», sizeof (256)); –

+0

ожидается ошибка 'char *', но аргумент имеет тип 'char **' –

+0

hmm, ваше объявление char * arg [100]; ? – Svisstack

0

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

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

arg3[0] = "man"; 

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

char newToken[64]; 
newToken[sizeof(newToken)-1] = 0; 
strncpy(newToken, "whatever", sizeof(newToken)-1); 
arg3[0] = newToken; 
+0

на самом деле оба способа это дает мне ту же ошибку note: expected 'char *', но аргумент имеет тип 'char **' –

+0

Вы назначаете arg31 или arg3? Вы не можете сделать это для arg31, это массив символов. arg3 - это массив указателей, и он будет работать с этим. –

+0

Я делаю это для arg 3 –

Смежные вопросы