2013-10-13 28 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 ING陣列本身:

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

哇!非常感謝您的快速回答! :D – LarsChung

+0

難道你不是指'strlen(「ls」)+ 1'?這與strlen(「ls」+1)'完全不同。 –

+0

@DavidFoerster絕對!謝謝! – dasblinkenlight