Antwort schreiben  Thema schreiben 
Verfasser Nachricht
Gigor
Durchstarter
**


Beiträge: 72
Gruppe: User
Registriert seit: Jun 2011

Status: Offline
Danke erhalten: 18
Beitrag: #1
xPSP  C - pointer type auf char-Array Problem

Hallöchen..
hab mich mal am programmieren versucht, und nachdem ich relativ viele Fehlermeldungen nach ner langen Weile wegbekommen hab, hänge ich nun.
Also erstmal Codeschnipsel
[anzahlSpieler ist eine IntegerVariable]

Code:
//Eine Eingabe-Funktion (Die glaub ich ziemlich doof ist aber das mit OSK fnd ich nich...
void eingabeStarten(char *dahinSchreiben[]);

//Eine Spieler-Struktur
typedef struct spieler{
        char *name[20];
        int punkte;
    } _spieler;

//Ein SpielerArray
_spieler spieler[MAX_SPIELER];

//Ein Array das alle Namen speichert [hatte das zuerst direct in der Spieler-Struktur, aber hat irgendwie auch Probleme gegeben dann hab ichs so probiert]

char namenDerSpieler[MAX_SPIELER][20];

//Und schließlich die Funktion die probleme macht..
void spielernamenEingeben(){
    int i;
    for(i = 1; i<=anzahlSpieler; ++i){
        eingabeStarten(&namenDerSpieler[i-1]);
        spieler[i-1].name = &namenDerSpieler[i-1];
        spieler[i-1].punkte = 0;
    }
}

Und dann erhalte ich diese Errors:

Code:
main.c:83: warning: passing argument 1 of 'eingabeStarten' from incompatible poi
nter type
main.c:84: error: incompatible types in assignment


Sollte der namenDerSpieler-Pointer nicht ein Pointer sein, der auf ein char-array zeigt, weil namenDerSpieler ist ja ein char-array aus char-arrays Smile ?
Vielleicht würde es gehn wenn ich das mit dem namenDerSpieler[][] weglasse und den Namen gleich mit in die Struktur schreib, aber dann würd ichs ja immernoch nicht verstehn^^

mfg
GigorSmile

06.10.2011 15:47
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Torky
Ex-Developer
****


Beiträge: 414
Gruppe: User
Registriert seit: Aug 2009

Status: Offline
Danke erhalten: 598
Beitrag: #2
RE: C - pointer type auf char-Array Problem

void eingabeStarten(char *dahinSchreiben[]); macht mal gar nichts. Du solltest die übergebenen daten auch verarbeiten oder?

06.10.2011 16:14
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neutrosider
Developer
*


Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010

Status: Offline
Danke erhalten: 2325
Beitrag: #3
RE: C - pointer type auf char-Array Problem

mach mal aus eingabeStarten(&namenDerSpieler[i-1]); das hier:
eingabeStarten(namenDerSpieler[i-1]);

und aus
void eingabeStarten(char *dahinSchreiben[]);
machste
void eingabeStarten(char *dahinSchreiben);

und torky hat natürlich recht, void eingabeStarten(char *dahinSchreiben[]); tut einfach überhauptnichts.





GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)

Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2011 16:41 von Neutrosider.

06.10.2011 16:40
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Torky
Ex-Developer
****


Beiträge: 414
Gruppe: User
Registriert seit: Aug 2009

Status: Offline
Danke erhalten: 598
Beitrag: #4
RE: C - pointer type auf char-Array Problem

Ist sowieso doof programmiert. Wie soll das ganze funktionieren? Woher kommen die spieler namen? Ist die Maximale Spieleranzahl eine konstante (wovon ich mal ausgehe). Ich würde einfach eine add_player routine erstellen so bist du viel flexiebler und nicht alle spieler auf einmal initalisieren. Du machst dein spieler array einfach global ( was es eh schon ist) und machst ne routine in der der neue spieler initalisiert wird und gut ist.

ist jetzt nur aus dem kopf und nicht überprüft aber so würde ich das ganze sehen:

int playercount = 0;
int max_player = 4;

void add_player (char *name)
{
if(playercount < max_player)
{
spieler[playercount].name = name;
spieler[playercount].punkte = 0;
playercount +=1;
}
}

Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2011 17:16 von Torky.

06.10.2011 17:10
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Gigor (Oct-7-2011)
Gigor
Durchstarter
**


Beiträge: 72
Gruppe: User
Registriert seit: Jun 2011

Status: Offline
Danke erhalten: 18
Beitrag: #5
xPSP  RE: C - pointer type auf char-Array Problem

Hi,
also die Eingaben-Funktion hab ich nur die Signatur mal angegeben, die komplette Funktion ist
-->Mist hab gemerkt, dass ich die funktion nicht eingebunden habe, menge fehler,<--
-->bin am durchguggen<--
-->Ok es compiliert, hunderte warnings.. naja bin weiter am tüfteln.<--

Spoiler: (anzeigen)
Hab ich das richtig verstanden, dass bei Zeigern nicht unterschieden wird ob er auf ein Arrray oder ein einzelnes char zeigt?
Also hab das jetzt gemacht und bei dem Spieler-struct das [20] auch weg gemacht, jetzt hat es teilweise compiliert und ne menge warunung ausgespuckt, dass muss ich jetzt erstmal durchgehnSmile
Danke schonmal, ich fürchte aber ich muss mich dann nochmal melden..
mfg
Gigor

Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2011 17:34 von Gigor.

06.10.2011 17:17
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neutrosider
Developer
*


Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010

Status: Offline
Danke erhalten: 2325
Beitrag: #6
xPSP  RE: C - pointer type auf char-Array Problem

Gigor :
Hi,
also die Eingaben-Funktion hab ich nur die Signatur mal angegeben, die komplette Funktion ist
-->Mist hab gemerkt, dass ich die funktion nicht eingebunden habe, menge fehler,<--
Spoiler: (anzeigen)
Hab ich das richtig verstanden, dass bei Zeigern nicht unterschieden wird ob er auf ein Arrray oder ein einzelnes char zeigt?
Also hab das jetzt gemacht und bei dem Spieler-struct das [20] auch weg gemacht, jetzt hat es teilweise compiliert und ne menge warunung ausgespuckt, dass muss ich jetzt erstmal durchgehnSmile
Danke schonmal, ich fürchte aber ich muss mich dann nochmal melden..
mfg
Gigor


ein zeiger ist und bleibt ein zeiger, aber da der array-name auch nicht viel mehr als ein pointer ist, verlangst du mit char *dahinSchreiben[] nach einem einzelnen buchstaben wenn ich mich nicht irre. Das heißt du könntest z.B. mit dahinSchreiben[4] nach 4 buchstaben, oder mit *dahinSchreiben nach einem beliebig langen text verlangen. ist nicht so einfach zu erklären, du solltest die das kapitel zu pointern mal durchlesen, ich denke das hilft dir:

http://openbook.galileocomputing.de/c_vo...121b2c65c1
http://openbook.galileocomputing.de/c_von_a_bis_z/012_c_zeiger_007.htm





GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)

Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2011 17:37 von Neutrosider.

06.10.2011 17:37
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Gigor (Oct-7-2011)
D3lta
Experte
****


Beiträge: 663
Gruppe: User
Registriert seit: Dec 2010

Status: Abwesend
Danke erhalten: 205
Beitrag: #7
xPSP  RE: C - pointer type auf char-Array Problem

@Gigor: Du hast char* text global deklariert?
Übergib den Text doch besser als Parameter Wink
Ja du hast es richtig verstanden Wink
Dafür ist ja die Nullterminierung da...

mfg D3lta

EDIT: zu langsam Big Grin

Neutrosider :

Gigor :
Hi,
also die Eingaben-Funktion hab ich nur die Signatur mal angegeben, die komplette Funktion ist
-->Mist hab gemerkt, dass ich die funktion nicht eingebunden habe, menge fehler,<--
Spoiler: (anzeigen)
Hab ich das richtig verstanden, dass bei Zeigern nicht unterschieden wird ob er auf ein Arrray oder ein einzelnes char zeigt?
Also hab das jetzt gemacht und bei dem Spieler-struct das [20] auch weg gemacht, jetzt hat es teilweise compiliert und ne menge warunung ausgespuckt, dass muss ich jetzt erstmal durchgehnSmile
Danke schonmal, ich fürchte aber ich muss mich dann nochmal melden..
mfg
Gigor


ein zeiger ist und bleibt ein zeiger, aber da der array-name auch nicht viel mehr als ein pointer ist, verlangst du mit char *dahinSchreiben[] nach einem einzelnen buchstaben wenn ich mich nicht irre. Das heißt du könntest z.B. mit dahinSchreiben[4] nach 4 buchstaben, oder mit *dahinSchreiben nach einem beliebig langen text verlangen. ist nicht so einfach zu erklären, du solltest die das kapitel zu pointern mal durchlesen, ich denke das hilft dir:

http://openbook.galileocomputing.de/c_vo...121b2c65c1
http://openbook.galileocomputing.de/c_von_a_bis_z/012_c_zeiger_007.htm


Code:
void f(char *string);

und

Code:
void f(char string[]);

sind das selbe, weil ein Array dort zu einem Zeiger zuerfällt Wink
Aber hier nicht:

Code:
int main()
{
    //...
    char *str0; //ganz normaler C-String (Hier muss aber für den String manuell Speicher reserviert werden!)
//  char str1[]; //verboten, da keine Größe angegeben wurde (was bei Arrays umbedingt getan werden muss)
    char str2[4]; //char-Array für 4 Buchstaben, also 3 Zeichen + '\0' ohne Initialisierung,
                      //hier wird der Speicher bei der Deklaration reserviert
    char str3[] = "abc"; //noch ein char-Array für 4 Buchstaben, mit Initialisierung,
                                //hier wird der Speicher bei der Deklaration reserviert
    char ch // ein einzelner Buchstabe
    //...
}

mfg D3lta

P.S.: Array != Pointer


"Linux is like a tent, no windows, no gates and an apache inside."

Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2011 18:11 von D3lta.

06.10.2011 17:43
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Gigor (Oct-7-2011)
Gigor
Durchstarter
**


Beiträge: 72
Gruppe: User
Registriert seit: Jun 2011

Status: Offline
Danke erhalten: 18
Beitrag: #8
xPSP  RE: C - pointer type auf char-Array Problem

So also es klappt jetzt alles soweit, sogar keine warnungen beim compilierenSmile
Danke euch drei für Hilfe.!
mfg Gigor

07.10.2011 15:48
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Antwort schreiben  Thema schreiben 

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
xGames [C] Array als Koordinaten DoD 1 1.336 18.12.2012 22:48
Letzter Beitrag: DoD
xPSP Array[c] frage prinzjo 4 1.349 01.12.2011 15:11
Letzter Beitrag: James_Cutter

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang