Pass char-pointer-array-Funktion
Ich versuche, um eine initialisierte char-pointer-array an eine Funktion. Ich kann nicht scheinen, um herauszufinden, warum die Funktion wird nur drucken Sie die Ziffern von jedem element im array.
Weiß jemand, wie ich drucken kann jedes string-element aus der übergebenen pointer array?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
void sort(char *);
int main()
{
char *states[4] = {"Florida", "Oregon", "California", "Georgia"};
sort(*states);
return 0;
}
void sort(char *states)
{
int x;
for (x = 0; x < 4; x++) {
printf("\nState: %d\n", states[x]); //only this will compile
//printf("\nState: %s\n", states[x]); //need to print this.
}
}
- Übergeben Sie einen Zeiger auf
Florida
für die Funktion, und drucken Sie dann aus den entsprechenden zahlen zu den ersten vier Buchstaben des Strings. War es nicht das, was Sie soll? sort(states);
undvoid sort(char *states[])
- Ok, ich sehe. So war ich nicht akzeptieren das array von Zeigern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
sort
Funktion muss akzeptieren das array von Zeigern wenn Sie möchten, drucken Sie den Inhalt des Arrays.Und Sie müssen übergeben Sie das array an die Funktion.
sort
Funktion übernehmen muss, ein Zeiger auf Zeiger. Letztlichchar *states[]
entsprichtchar **states
als eine Funktion parameter, daherchar *states[]
ist nicht ein array von Zeigern.sort
- Funktion muss ein Prototyp, der es ermöglicht, das argument übergeben werden. Ein array-name zerfällt zu einem Zeiger mit dem Wert gleich die Adresse des ersten Elements, sosort
muss akzeptieren, dass ein Zeiger auf einechar *
.main
.states
ist ein array von Zeigern aufchar
. Im Funktionsaufrufsort(states, 4);
,states
umgewandeltchar **
(Zeiger auf erstes element des Arraysstates
ich.e Zeiger aufstate[0]
).Müssen Sie analysieren, ein array von Zeigern auf char zu
sort
(statt nur Zeiger auf char).Als jhx wies darauf hin, Sie müssen übergeben Sie die Größe des array. Sie können
sizeof
damit nicht die hart-Codierung4
. Auch das auslassen der array-Größe bei der Initialisierung.states
ist ein array von pointer auf char.char *
ist ein Zeiger auf char. So, dass die division gibt die Anzahl der Elemente (dh, die Anzahl von char-Zeigern) in derstates
array von Zeigern.Du musst den char-pointer-array für die Funktion:
Dem Grund, dass nur numerische Werte, die Sie bekommen ist, dass nur Zeiger auf erstes element string
states[0]
des Arraysstates
übergeben, d.h. Sie übergeben&states[0][0]
. Ja, die Erklärungwird nur dann gedruckt wird, wird der numerische Wert der ersten
4
Zeichen von string"Florida"
.Muss man den Zeiger auf erstes element des Arrays
states
, d.h.&states[0]
.Dies kann durch ändern der Feststellung der Funktion
sort
zuund rufen Sie es als
Den Sie senden
states
was ist einarray of pointers
. So müssen Sie zum senden der Basis-Adresse des Arrays an die FunktionDann erhalten Sie ein array von Zeiger nur
Hartzucodieren die Größe, wenn auch keine gute Idee, so besser fügen Sie einen weiteren parameter
size
um die Funktion aufrufen.dann später zur Iteration über das array
sort(states, sizeof(states));
ist falsch.