2011-01-05 65 views
1

我試圖連接具有從ARGV數組的數組(我忘了,正式的名稱,輸入數組?參數數組?)數組c級聯問題

反正我initalize原始數組,然後我使用memcpy將兩個數組複製到新數組中。

int main(int argc, char *argv[]) { 
    char *args1[] = {"foo","bar"}; 
    char **args = (char**) calloc(argc, sizeof(char*)); 
    memcpy(args, args1, sizeof(char*) * 2); 
    memcpy(args + sizeof(char*) * 2, argv+1, sizeof(char*) * (argc-1)); 

但是當我運行這個

printf("%s %s %s\n", args[0], args[1], args[2]); 

,然後運行

./test巴茲

我得到的

結果

富吧(null)

所以我想弄清楚我的第二個memcpy搞砸了,但我找不到它。任何幫助?提前致謝。

回答

5

這段代碼有兩個問題。

問題#1

calloc(argc, sizeof(char*)) 

應該是

calloc(argc + 2, sizeof(char*)) 

問題#2

您混淆指針運算。這部分

args + sizeof(char*) * 2 

應該簡單地

args + 2 

或者,你可以使用

&args[2] 

無論哪種方式,不用乘以該類型的尺寸偏差。編譯器自動執行該操作。

+0

嘆了口氣。我知道我的指針算術,所以我很愚蠢的做出這樣的錯誤而沒有注意到它。這是我最後一次從rosettacode採取指針 – 2011-01-05 22:45:24