2016-05-14 3 views
4

Ich stürze mich immer in den Fall 4 meines Schalters in meiner Hauptfunktion und kann es nicht beheben.Drucken von Zeichenfolgen aus einem Array in einer Funktion in C

ich den Code ein bisschen erklärt, und hoffe, euch kann mir helfen:

Initialisierung der Funktion

void function1(char[]); 

Deklarieren des Array von Strings

const char *my_array[] = { 
"Array of strings one", 
"Array of strings two", 
"Array of strings three"}; 

Looping durch die Anordnung von Strings in der Hauptfunktion (Dies funktioniert korrekt, druckt das Array von Strings)

int i; 
for (i=0; i < 3; i++) { 
    printf("%s\n", my_array[i]); 
} 

Der Code in der Schalterfunktion (noch in der Hauptfunktion)

case 4: 
      function1(my_array); 
      break; 

Ich habe getestet und alle vorherigen Code korrekt funktioniert, ist das Problem hier ist (außerhalb der Hauptfunktion):

Wenn ich den Fall 4 des Schalters ausführen, stürzt es ab.

Die 2 die Log-Warnung gibt:

Warnung: Übergabe des Arguments 1 von 'function1' von inkompatiblen Zeigern Typ

Warnung: Format '% s' erwartet Argument vom Typ 'char *' , aber Argument 2 hat ‚int‘ [-Wformat =]

Sorry, wenn die Erklärung ist es ein wenig unklar, ich versuchte, so hart wie ich kann es sein, leicht zu verstehen geben.

Ich hoffe wirklich, dass Sie mir helfen können, danke !!

+2

Sie sind nicht vorbei ein 'char []', du bist Übergabe eines 'char * []' oder 'char **' –

Antwort

9

Die erste Warnung, nämlich

Warnung: Argument übergeben 1 von ‚function1‘ von inkompatiblen Zeigertyp

erzählt die Geschichte: ein Array von Zeichenzeiger sind vorbei, aber die Funktion Erklärung sagt, dass es einen einfachen Zeichenzeiger wünscht.

Die zweite Warnung sagt Ihnen das Gleiche von der Innenseite der Funktion:

Warnung: Format '% s' erwartet Argument vom Typ 'char *', aber Argument 2 hat Typ 'int' [ -Wformat =]

Das Format ein C-String will, aber Sie eine einzelne char* sind vorbei.

Alles, was Sie tun müssen, um dieses Problem zu beheben ist ein fehlenden Stern auf die Erklärung von function1 hinzuzufügen:

void function1(const char *my_array[]) 
//    ^^^^^ ^

Während Sie gerade dabei sind, fügen Sie const die Deklaration von my_array in main anzupassen.

* Compiler sagt, dass Sie ein int sind vorbei, nicht char, weil printf variable Anzahl von Parametern erfolgt, so dass der Compiler bestimmte Transformationen Argumente der Funktion gilt. Eine dieser Transformationen ist die Förderung aller char s zu int s.

+1

Es sollte 'void function1 (const char * my_array [])' sein, um mit der Deklaration der 'my_array' -Variable in main übereinzustimmen. – mch

+0

@mch Sie haben Recht, OP sollte 'const' auch hinzufügen. Vielen Dank! – dasblinkenlight

1

Bitte haben Sie einen genaueren Blick auf die Funktion Verzögerung

Leere function1 (char my_array [])

Sie sind in char Array übergeben, welche Saite ist (was natürlich wollen Sie nicht) . Das zweite Problem ist mit dieser Linie,

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

, wenn Sie sagen my_array [i], Sie Charakter bei ‚i‘ Position zuzugreifen versuchen, und mit% s ein Zeichen drucken (das ist ein Absturz). Um ein Zeichen zu drucken, sollten Sie dies schreiben

printf(%c\n", my_array[i]); 

lässt nun den Code korrigieren entsprechend Ihrer Anforderung, sollten Sie eine Funktion haben, die das Array von char Zeiger nimmt (oder String)

void function1(const char* my_array[]) 
{ 
    for (size_t i = 0; i < 3; i++) 
    { 
     printf("%s\n", my_array[i]); 
    } 
    printf("\n"); 
} 

Bitte beachten die Verwendung von 'const' (wenn Sie nur die Daten aus Ihrem String-Array lesen/drucken müssen). Bitte denken Sie darüber nach, auch die Größe des Arrays zu senden und diese Größe zu verwenden, um Ihre Schleife zu durchlaufen.

void function1(const char* my_array[], size_t n) 
{ 
    for (size_t i = 0; i < n; i++) 
    { 
     printf("%s\n", my_array[i]); 
    } 
    printf("\n"); 
} 
1

Ok Jungs, die ich habe versucht, alle Ihre Lösungen und wenn ich „const“ in der Funktion hinzufügen, es gibt mir eine Fehlermeldung „Fehler in Konflikt stehenden Typen“.

Als ich euch alle gelesen habe, habe ich herausgefunden, dass ich nur ein Zeichen in der Funktion übergebe, nicht eine Zeichenkette (das * fehlte bei der Initialisierung der Funktion und der Funktion).

ich änderte sich dies:

void function1(char[]); 

Um dies:

void function1(char*[]); 

und diese:

void function1(char my_array[]) { 
    for (i=0; i < 3; i++) { 
    printf("%s\n", my_array[i]); 
    } 
    printf("\n"); 
} 

dazu:

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

Und es funktioniert wie ein Charme!

Es tut mir leid, wenn es ein bisschen eine Frage von noob war, aber ich fange mit C-Programmierung an.

Vielen Dank für Ihre Antworten Ich schätze es!

+0

:) Gut zu hören! Mach weiter! – Bishop

0

Unter der Annahme, dass Sie eine Funktion wollen, die durch die Elemente eines Arrays Schleifen und druckt alle Inhalte, hier ist was ich vorschlagen:

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


void view(char *array[]){ 
    int i; 
    for (i = 0; i < sizeof(array)/sizeof(char); i++){ 
     //sizeof(array)/sizeof(char) = length of any array   
     printf("\nElement -> %s",array[i]); 
    } 
} 


int main() { 

    char *arr[] = {"String One", "String Two", "String Three"}; 

    view(arr); //Calling the function 

    return 0; 
} 
Verwandte Themen