2016-05-04 8 views
-1

Ich kann nicht auf das Array von Haupt in der Funktion zugreifen. Wie korrigiere ich das? Wenn ich es kompiliere, sagen wir, dass das Argument 1 vom Typ ** char ist und das Argument 1 in inkompatibel an fre übergeben wird. Muss ich irgendwelche Syntaxen ändern?Übergeben Char Charray in eine Funktion in C

void fre(char *asd); 

int main() 

{ 
    char *names[7]={"Jayan Tennakoon","John Long","Robert Lang"}; 

    int i; 

    for(i=0;i<7;i++) 
    { 

     printf("%s\n",names[i]); 

    } 

    fre(names); 

    return 0; 

} 

void fre(char *asd) 
    { 
    int i; 

    for(i=0;i<7;i++) 
     { 

      printf("%s\n",asd[i]); 

     } 
} 
+1

'void fre (char * asd)' -> 'void fre (char * asd [])' oder 'void fre (char ** asd)' – BLUEPIXY

+1

... und du könntest die Anzahl der Namen übergeben Auch wird 'fre' dann eher wie 'main aussehen (int argc, char * argv [])' –

+0

In 'main' haben Sie' char * names [7] ', ein Array von Zeigern auf char. Sie versuchen, dieses Array an die Funktion 'fre()' zu übergeben. Aber 'fre' ist so deklariert, dass es einen einzelnen Zeiger auf char akzeptiert. Es funktioniert also nicht. –

Antwort

0

Mit

char *names[7]={"Jayan Tennakoon","John Long","Robert Lang"}; 

Sie haben ein Array von Zeigern auf char. So

void fre(char *asd) 

sollte

void fre(char *asd[], int n) 
/* it is good to pass the total(here 3) 
* since you have initialized the first three elements 
*/ 
{ 
. 
. 
for(i=0;i<n;i++) 
. 
. 
1

Sie haben eine Reihe von 7 Zeiger deklariert verkohlen. Du hast es mit 3 von ihnen initialisiert. Sie müssen ein Array von Zeigern übergeben, nicht einen Zeiger auf ein Array von Zeichen. Basierend auf den Kommentaren werde ich ein paar weitere Möglichkeiten hinzufügen, um die Arrays zu deklarieren, die deutlich machen, was die verschiedenen Möglichkeiten bedeuten.

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

void fre(char *asd[]); 

int main(void) { 
    char * name [ ] = {"Jayan Tennakoon","John Long","Robert Lang"}; 
    char * names [7] = {"Jayan Tennakoon","John Long","Robert Lang"}; 
    char names2[7] = {'H', 'e', 'l','l','o','\0'}; 
    char **names3 = names; 

    printf("names2 = %s\n",names2); 
    printf("names3[0] = %s\n",names3[0]); 
    int i; 
    for(i = 0; i < 3; i++) { 
    printf("%s\n",names[i]); 
    } 
    fre(names); 
    return 0; 

} 

void fre(char *asd[]) { 
    int i; 
    for(i = 0; i < 3; i++) { 
    printf("%s\n",asd[i]); 
    } 
} 

Ich hatte auch erleben Sie die Schleife 7-3 oder würden Sie nicht definiertes Verhalten zu reduzieren, wenn man Glück hat dies ein Segmentierungsfehler wäre, wenn das Pech es wahrscheinlich Müll gedruckt hätte, aber mit einer Rückkehr Statue von 0 verlassen .

+0

Hallo Harry. Danke, es hat perfekt funktioniert. Ich habe eine Frage, warum ist es * char [] und nicht nur char [], wenn ich versuche, die Namen zu speichern? –

+0

Was meinst du mit den Namen speichern? Meinst du das 'char * names [7] = {" Jayan Tennakoon "," John Long "," Robert Lang "};' – Harry

+0

Schau dir die names2-Deklaration an und vergleiche sie mit dem Namen usw. – Harry