Announcement

Collapse
No announcement yet.

Char-Zeiger dereferenzieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Char-Zeiger dereferenzieren

    Hallo, Leute,
    ich hab wieder so'n Problem:
    Ihr kennt ja alle die Routine
    <Pre>
    int Variable = 0
    int *pZeiger = &Variable
    *Zeiger = 1
    </Pre>
    Normalerweise wird dann bei "cout&lt&lt Variable" der Wert angezeigt, der durch *Zeiger = (Wert) gesetzt wurde.
    Bisher habe ich das nur mit int-Variablen gemacht. Jetzt bin ich in der Verlegenheit, das mit einer Char-Var. machen zu müssen (Programm für Windows):
    <Pre>
    char szText [30];
    char *pText = szText;
    switch (Bedingung)
    {
    case Bedingung1:
    {
    *pText = "Eine Taste wurde gedrückt.";
    break;
    }
    </Pre>
    ...und noch einige andere Bedingungen. Danach soll szText über TextOut aingezeigt werden. Leider bekomme ich beim Compelieren in dieser Zeile den Fehler "Cannot convert 'char *' to 'char'".
    Was mache ich hier falsch? Kann mir einer helfen?

  • #2
    Hi Andreas,

    mit den chars ist das ein bißchen aufwändiger...

    m.E. kann nicht einfach ein String in ein char kopiert werden (ein char* ist ein Array of chars und jedes einzelne Zeichen des Arrays muß kopiert werden).

    Ersezte die Zeile *pText = ... durch;
    <PRE>
    AnsiString OutString = "Eine Tast wurde gedrückt.";
    strcpy(pchar, OutString.c_str());
    </PRE>
    Es ist unerläßlich sicherzustellen, daß der Source-Char nicht größer dem Dest-Char ist!!! in Deinem Fall darf die Zeichenkette maximal 29 Zeichen lang sein. Das 30te Zeichen wird für das \0 am Ende des chars benögtigt. Im Prinzip kann auch der pText-Zeiger komplett entfernt werden, da er nur eine Kopie des szText-Zeigers ist.

    In deinem Fall würde ich innerhalb der switch case nur mit AnsiString arbeiten und am Ende einfach szText = OutString.c_str() setzen. Hierbei wird die Länge von szTest automatisch auf die Länge des Strings gesetzt (es wird ein char-Array erzeugt, das dem String entspricht). Natürlich darfst Du in dem Fall nur einen Zeiger erzeugen, aber nicht bereits ein Array für szText (also statt char szText[30]; nur char* szText). Nicht vergessen szText am Ende wieder freizugeben.

    Ich hoffe ich hab' das noch auf die Reihe bekommen, ist schon ein Weilchen her, daß ich mit chars hantiert habe...

    Grüße Joche

    Comment


    • #3
      Stop - ich war im falschen Film. Hier geht's ja gar nicht um den BCB Builder, sondern um Borland C++...

      Schau Dir auf jeden Fall mal die Funktion strcpy() an...

      Eigentlich sollte es mit strcpy(pText, "Eine Taste wurde gedrückt."); getan sein

      Joche

      Comment

      Working...
      X