2013-10-13 2 views
1

Здесь в основном простой код двойного указателя и то, что я пытаюсь использовать:Кастинг Двойного указателя и как использовать в C

int argsCount = 1; 
char **cmdArgs1 = malloc((argsCount + 1)*sizeof(char*)); 

Я хочу входные значения в cmdArgs1 и здесь в основном то, что я делаю и вызывая сегментный вина

for(counter = 0; counter < argsCount; counter++) 
{ 
    strcpy(cmdArgs1[counter],"ls"); 
} 

Я имею в виду, что я не могу использовать «cmdArg1 [счетчик]» скопировать «LS», так как двойной указатель не работает таким образом? Я не уверен ...

Даже я думаю, что это немного расплывчато, но я не знаю, как правильно сформулировать вопрос, я постараюсь обновить его на основе комментария. Спасибо!

+0

'cmdArg s1 [counter] 'не инициализируется. Вы не должны ссылаться на него, пока не присвоите ему значимое значение. –

ответ

3

Ваш cmdArgs1 является указателем на указатель, что означает, что его недостаточно для выделения пространства для самого массива. Вы должны выделить пространство для отдельных массивов символов (или для отдельной строки C).

Вы можете сделать это в отдельном вызове malloc

for(counter = 0; counter < argsCount; counter++) 
{ 
    cmdArgs1[counter] = malloc(strlen("ls")+1); // +1 for null terminator 
    strcpy(cmdArgs1[counter], "ls"); 
} 

или strdup:

for(counter = 0; counter < argsCount; counter++) 
{ 
    cmdArgs1[counter] = strdup("ls"); 
} 

В обоих случаях ваша программа несет ответственность за free ИНГ элементы массива перед free Инг сам массив:

for(counter = 0; counter < argsCount; counter++) 
{ 
    free(cmdArgs1[counter]); 
} 
free(cmdArgs1); 
+0

Вау! так спасибо за быстрый ответ! : D – LarsChung

+0

Вы хотите сказать "strlen (" ls ") + 1'? Это совсем другое дело, как «strlen (« ls »+1)». –

+0

@DavidFoerster Абсолютно! Благодаря! – dasblinkenlight

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