2011-01-05 61 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