C: Pointer auf zweidimensionales Array an Funktion übergeben

Gast #1246102
Hallo,

ich steh gerade aufm Schlauch, liegt wahrscheinlich an der Uhrzeit :(

Ich verwende ein zweidimensionales char-Array für verschiedene Texte, 
z.B. Wochentage:
1
uchar txtWeekDay[][10] = {{"    Montag"},
2
      {"  Dienstag"},
3
      {"  Mittwoch"},
4
      {"Donnerstag"},
5
      {"   Freitag"},
6
      {"   Samstag"},
7
      {"   Sonntag"}
8
};

Ich möchte in Abhängigkeit einer Variablen den entsprechenden Text 
auswählen und an eine Funktion übergeben.Die Funktion erwartet als 
Parameter einen Pointer auf ein eindimensionales char-Array, also einen 
Text.
1
void func(unsigned char *pText);

Der Aufruf mit
1
func(txtWeekDay[Wochentag][0])
spuckt mir Fehlermeldungen aus (illegal pointer conversion),
während
1
func(txtWeekDay[Wochentag])
zwar akzeptiert wird, aber murks macht, offenbar wird die 
Nullterminierung nicht erkannt, es werden alle Texte erkannt.
Ich hab's auch mit
1
func((char *)txtWeekDay[Wochentag][0])
probiert, aber hier scheint der Pointer ins Nirwana zu zeigen, da wird 
gleich gar nichts ausgegeben, das ist wiederum zu wenig :)

Wie gesagt, es ist schon spät, ich werd morgen mal untersuchen, wo denn 
die Pointer eigentlich genau hinzeigen, aber vielleicht sieht jemand 
was, was ich gerade nicht zu erkennen in der Lage bin.

Danke.

Ralf
Gast #1246141
Du reservierst zehn Zeichen und belegst die mit Blabla und Leerzeichen 
-- wo soll da das Nullbyte hin?! Außerdem schießt du dir mit der 
Initialisierung des VEKTORS evtl. ins Knie. Probier mal:
1
char *tage[] = {
2
  "Montag", "Dienstag", ..., "Freitag"
3
};
4

5
func(tage[0]);

Übrigens nimmt man für 'Zeichen' meistens einfach nur 'char'. Das ist 
zwar je nach Einstellungen und Compiler mal signed und mal unsigned, 
aber hat sich eben so eingebürgert. Wenn man dann Zeichen vergleichen 
muss, castet man wieder nach (unsigned char) :-)
#1246342
Ralf wrote:

> während
>
1
> func(txtWeekDay[Wochentag])
2
>
> zwar akzeptiert wird,

Das wäre in deinem Fall die richtige Lösung.

> aber murks macht,

Den Murks hast du gemacht

> offenbar wird die
> Nullterminierung nicht erkannt,

Kein Wunder, du hast keine.
Der String "  Dienstag" ist 11 Zeichen lang (wenn man die 0-Terminierung 
mit einrechnet.


Sven hat schon die bessere Lösung gepostet. Das einzige was ich daran 
noch ändern würde:
1
const char *tage[] = {
2
  "Montag", "Dienstag", ..., "Freitag"
3
};

Denn das sind ja die Strings tatsächlich: konstant. Und damit enthält 
der VEKTOR lauter Pointer auf konstante Character.
Gast #1246805
@Daniel:
> func(&txtWeekDay[Wochentag][0])
Danke, probier ich mal aus.

@Sven:
> Du reservierst zehn Zeichen und belegst die mit Blabla und Leerzeichen
> -- wo soll da das Nullbyte hin?!
argl Natürlich, dass hab ich total verpennt :( Werd ich ebenfalls 
ausprobieren.

> Außerdem schießt du dir mit der Initialisierung des VEKTORS evtl. ins Knie.
Warum?

> Probier mal: ...
Okay, werd ich ebenfalls probieren...
Danke!

@KHB:
> Das wäre in deinem Fall die richtige Lösung.
Jepp, wenn ich genug Platz lasse für die Nullterminierung, könnts dann 
doch so klappen :) ->Werd ich probieren...

> Den Murks hast du gemacht
Hm, das hat aber nur deine Tastatur abgenutzt, meinst du nicht? :)

> Kein Wunder, du hast keine.
Jo, heut nacht ist mir das nicht aufgefallen :)

> Sven hat schon die bessere Lösung gepostet. Das einzige was ich daran
> noch ändern würde:
> ...
> Denn das sind ja die Strings tatsächlich: konstant. Und damit enthält
> der VEKTOR lauter Pointer auf konstante Character.
Ja, das werde ich ebenfalls austesten.

Besten Dank an alle.

Ralf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.