2016-03-29 6 views
0

Mein Code ist:Warnung: Zuordnung macht ganze Zahl von Zeiger ohne cast [standardmäßig aktiviert]

#include <stdio.h> 
#include <stdlib.h> 

int main (int argc, char *argv[]){ 
    int i = 0; 
    int count = argc - 1; 
    char *numbers = malloc(count * sizeof(char)); 
    for(i = 1 ; i <= argc ; i++){ 
     printf("%s ", argv[i]); 
     numbers[i] = argv[i]; 
    } 
    printf ("%s \n", numbers); 
    return 0; 
} 

Der Fehler, der kam, ist:

tamal @ baba-Desktop : ~/Desktop/c $ cc experiment.c -o Experiment

experiment.c: In der Funktion 'main':

experiment.c: 10: 16: Warnung: Zuordnung ganze Zahl von Zeiger macht ohne cast [standardmäßig aktiviert]

Inumbers[i] = &(argv[i]);in Zeile 10. Immer noch das gleiche Ergebnis ausprobiert.

+0

Was soll das Programm tun? – Barmar

+0

'char * Zahlen = malloc (Anzahl * sizeof (char) + 1); int j = 0; für (i = 1; i <= count; i ++) { printf ("% s", argv [i]); Zahlen [j ++] = * argv [i]; } Zahlen [j] = 0; ' – BLUEPIXY

+0

Ich wollte die Werte einzeln an argv ausgeben. Dann drucken Sie die Artikel zusammen aus. –

Antwort

0

Sie haben zweimal zu dereferenzieren argv dem char-Wert numbers[i] = *(*(argv + i));

+0

Jetzt ist die Ausgabe 'Segmentation fault (core dumped)'. –

+0

Oh, Sie haben über das Ende von argv indiziert, sollte zu i zMesh

+0

Gibt es ein Problem mit Zeile 12 'printf ("% s \ n", Zahlen);' weil nichts gedruckt wird. –

1

in Ihrem Code numbers[i] ist vom Typ char, während argv[i] vom Typ char * und beide sind nicht das gleiche. Deshalb ist die Warnung da. Im zweiten Fall ist numbers[i] = &(argv[i]); auch falsch, da &(argv[i]); auch kein char ist.

Unterm Strich ist, haben Sie eine char Zeiger numbers und wenn Sie die Indizierung Bediener darauf verwenden, können Sie die inidiviual Elemente wie char erhalten, das heißt, alle numbers[i] sind vom Typ char. Sie müssen ihm einen anderen char Wert zuweisen.

0

Dies sollte getan werden, um zu bekommen, als wenn es mehr als zwei Argumente sind:

int count = argc - 1; 
char **numbers = (char **)malloc(count * sizeof(char*)); 
for(i = 0 ; i < argc ; i++){ 
    printf("%s ", argv[i + 1]); 
    // Stores all arguments except "experiment"(i.e. exe file). 
    numbers[i] = argv[i + 1]; 
} 
for(i = 0; i <= count; i++){ 
    printf("%s\n", numbers[i]); 
} 

Und wenn es nur zwei Argumente ist es dann sollte einfach gemacht werden als:

char *number = (char *)malloc(1*sizeof(char)); 
// Store argument other than provided .exe file i.e. "experiment" 
number = argv[1]; 
printf("%s\n", number); 
Verwandte Themen