|
Verfasser |
Nachricht |
Gigor
Durchstarter
Beiträge: 72
Gruppe: User
Registriert seit: Jun 2011
Status:
Offline
Danke erhalten: 18
|
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]
//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:
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 ?
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
Gigor
|
|
06.10.2011 15:47 |
|
|
|
Torky
Ex-Developer
Beiträge: 414
Gruppe: User
Registriert seit: Aug 2009
Status:
Offline
Danke erhalten: 598
|
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 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
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 |
|
|
|
Torky
Ex-Developer
Beiträge: 414
Gruppe: User
Registriert seit: Aug 2009
Status:
Offline
Danke erhalten: 598
|
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 |
|
Folgende User bedanken sich: |
|
Gigor
Durchstarter
Beiträge: 72
Gruppe: User
Registriert seit: Jun 2011
Status:
Offline
Danke erhalten: 18
|
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.<--
void eingabeStarten(char *dahinSchreiben){
text = dahinSchreiben; // fuer die anzeigen-Funktion
int fertig = 0; //
while(fertig==0){
oldpad = pad;
sceCtrlReadBufferPositive(&pad,1);
if(pad.Buttons & PSP_CTRL_CIRCLE){ //zum Beenden der eingabe
fertig = 1;
}
if(pad.Buttons & PSP_CTRL_UP){
auswahl = auswahl + 1;
if(auswahl>25){
auswahl = 0;
}
sceKernelDelayThread(100000); //in Mikrosekunden
}
if(pad.Buttons & PSP_CTRL_DOWN){
auswahl = auswahl - 1;
if(auswahl<0){
auswahl = 25;
}
sceKernelDelayThread(100000);
}
if(pad.Buttons & PSP_CTRL_CROSS){
if(oldpad.Buttons & PSP_CTRL_CROSS){
//nichts machen weil noch von letztem mal gedrueckt
}
else{
*(dahinSchreiben+buchstabenpos) = buchstabenKlein[auswahl];
++buchstabenpos;
}
}
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 durchgehn
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 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
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,<--
void eingabeStarten(char *dahinSchreiben){ //
while(fertig==0){
oldpad = pad;
sceCtrlReadBufferPositive(&pad,1)
if(pad.Buttons & PSP_CTRL_CIRCLE){ //zum Beenden der eingabe
fertig = 1;
}
if(pad.Buttons & PSP_CTRL_UP){
auswahl = auswahl + 1;
if(auswahl>25){
auswahl = 0;
}
sceKernelDelayThread(100000); //in Mikrosekunden
}
if(pad.Buttons & PSP_CTRL_DOWN){
auswahl = auswahl - 1;
if(auswahl<0){
auswahl = 25;
}
sceKernelDelayThread(100000);
}
if(pad.Buttons & PSP_CTRL_CROSS){
if(oldpad & PSP_CTRL_CROSS){
//nichts machen weil noch von letztem mal gedrueckt
}
else{
*dahinSchreiben[buchstabenpos] = buchstabenKlein[auswahl];
++buchstabenpos;
}
}
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 durchgehn
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 |
|
Folgende User bedanken sich: |
|
D3lta
Experte
Beiträge: 663
Gruppe: User
Registriert seit: Dec 2010
Status:
Abwesend
Danke erhalten: 205
|
RE: C - pointer type auf char-Array Problem
@Gigor: Du hast char* text global deklariert?
Übergib den Text doch besser als Parameter
Ja du hast es richtig verstanden
Dafür ist ja die Nullterminierung da...
mfg D3lta
EDIT: zu langsam
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,<--
void eingabeStarten(char *dahinSchreiben){ //
while(fertig==0){
oldpad = pad;
sceCtrlReadBufferPositive(&pad,1)
if(pad.Buttons & PSP_CTRL_CIRCLE){ //zum Beenden der eingabe
fertig = 1;
}
if(pad.Buttons & PSP_CTRL_UP){
auswahl = auswahl + 1;
if(auswahl>25){
auswahl = 0;
}
sceKernelDelayThread(100000); //in Mikrosekunden
}
if(pad.Buttons & PSP_CTRL_DOWN){
auswahl = auswahl - 1;
if(auswahl<0){
auswahl = 25;
}
sceKernelDelayThread(100000);
}
if(pad.Buttons & PSP_CTRL_CROSS){
if(oldpad & PSP_CTRL_CROSS){
//nichts machen weil noch von letztem mal gedrueckt
}
else{
*dahinSchreiben[buchstabenpos] = buchstabenKlein[auswahl];
++buchstabenpos;
}
}
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 durchgehn
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
und
sind das selbe, weil ein Array dort zu einem Zeiger zuerfällt
Aber hier nicht:
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 |
|
Folgende User bedanken sich: |
|
Gigor
Durchstarter
Beiträge: 72
Gruppe: User
Registriert seit: Jun 2011
Status:
Offline
Danke erhalten: 18
|
RE: C - pointer type auf char-Array Problem
So also es klappt jetzt alles soweit, sogar keine warnungen beim compilieren
Danke euch drei für Hilfe.!
mfg Gigor
|
|
07.10.2011 15:48 |
|
|
|