2011-01-05 6 views
1

Ich versuche, ein Array mit dem Array von argv zu verketten (ich den offiziellen Namen für das vergessen haben, Eingabe-Array? Parameter-Array?)c Array Verkettung Problem

wie auch immer, ich initialisieren das ursprüngliche Array, dann Verwenden Sie memcpy, um die zwei Arrays in das neue Array zu kopieren.

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)); 

aber wenn ich laufen diese

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

und laufen dann

./test baz

ich ein Ergebnis von

foo bar (null)

So versuche ich mein zweites Memcpy geschraubt, um herauszufinden, wo, aber ich kann es nicht finden. Irgendeine Hilfe? Danke im Voraus.

Antwort

5

In diesem Code gibt es zwei Probleme.

Problem # 1

calloc(argc, sizeof(char*)) 

sollte

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

Problem # 2

Sie sein werden Pointer-Arithmetik verwirrend. Dieser Teil

args + sizeof(char*) * 2 

sollte einfach

args + 2 

Alternativ sein, Sie

&args[2] 

So oder so verwenden können, multiplizieren nicht die durch die Größe des Typs versetzt. Der Compiler macht das automatisch.

+0

seufzen. Ich kenne meine Zeigerarithmetik, also war es dumm von mir, diese Art von Fehler zu machen und es nicht zu bemerken. Das ist das letzte Mal, dass ich einen Zeiger von Rosettacode nehme –