Char Problem



  • Hallo.

    Ich bin gerade dabei für die PlayStationPortable ein kleines Programm zu schreiben. Ein virtuelles Keyboard, gesteuert über hoch runter.

    ich habe:

    char eingabe[50]="";
    char aktzeichen[1]="A";

    strcat(eingabe,aktzeichen); //ist glaube ich diese funtkion die ich benutze, die funtkioniert auch ich hänge halt immer ein char dran, kann sein das die syntax jetzt nicht stimmt, aber ich kann gerade nicht in mein SRC reinschauen.

    Jetzt möchte ich aber eine NEUEINGABE machen und eingabe komplett zurücksetzen.

    wenn ich eingabe[]=""; schreiben, und mit dem virtuellen Keyboard wieder etwas eingebe, dann wird hinten drangehängt und nicht komplett neu gemacht.

    weiss jmd wie ich auf einen Rutsch eingabe leeren kann? wie wenn die var neu initialisiert wird.

    Nächste Frage.

    ich habe das als Funktion

    void pspkb();

    nun möchte ich aber die funtkion im main aufrufen, sodass mir die funktion den char[50] eingabe ausgibt.

    wie muss ich das machen, ohne globale Var zu verwenden.

    char pspkb();
    {
    return eingabe;

    }

    ?????

    Hoffe es kann mir einer Noobverständlich helfen.

    PS:

    Wenn sich jmd zum Thema PSP Programming informieren möcht:
    http://www.bumuckl.com//index.php?option=com_content&task=category&sectionid=5&id=22&Itemid=122

    http://www.bumuckl.com//index.php?option=com_content&task=view&id=159&Itemid=122



  • Erstens: "char aktzeichen[1]" ist ein wenig zu klein für das String-Literal "A" (da brauchts noch Platz für den Null-Terminator). Wenn der Compiler das tatsächlich schluckt, hast zwar ein Zeichen-Array (mit Platz für ein Element, also witzlos), aber keinen sauber abgeschlossenen String (den strcat() und Co. benötigen).

    Wenn du willst, kannst du die einzelnen Elemente deines Arrays auch direkt über ihren Index ansprechen - und mit eingabe[0]='\0'; "löschst" du den String. (aber ich würde anstelle der char-Arrays lieber std::string verwenden)

    Zweitens: Wenn eine Funktion mit deinen Daten arbeiten soll, gibt es nur zwei Möglichkeiten - globale Variablen oder Parameter (letztere sind besser).



  • char eingabe[50]="";
    char aktzeichen[1]="A";

    OK dass mit aktzeichen[1]="A" ist OK.

    Mein kleines Programm funtkioniert auch schon, wie genau ich es jetzt deklariert habe, weiss ich leider nicht, da mir momentan mein SRC nicht vorliegt.

    wenn in eingabe "testtext" steht und ich
    eingabe[0]="/O"; schreibe.... steht dann in eingabe "" drinnen" ???

    oder "esttext" oder " esttext"

    was passier wenn ich eingabe[2]="/0"; eingebe

    steht dann"tsttext" oder "t sttext" drinnen.

    aber schon mal vielen vielen Dank für den Tip.....

    ach ja, muss ich f0r eingabe[0]="/0" noch eine bestimmte h-datei includen ???

    string.h geht bei mir leider nicht, da uController....



  • Edit: Sorry hab was vergessen.

    was passier wenn ich eingabe[2]="/0"; eingebe

    steht dann"tsttext" oder "t sttext" drinnen. oder "te" ???



  • KingSebo schrieb:

    wenn in eingabe "testtext" steht und ich
    eingabe[0]="/O"; schreibe.... steht dann in eingabe "" drinnen" ???

    oder "esttext" oder " esttext"

    was passier wenn ich eingabe[2]="/0"; eingebe

    steht dann"tsttext" oder "t sttext" drinnen.

    aber schon mal vielen vielen Dank für den Tip.....

    Erstens waren das dort keine doppelten Anführungszeichen, sondern einfache - und zweitens steht nach den Zuweisungen "\0esttext" bzw. "te\0ttext" in dem String - aber die Stringverarbeitungsfunktionieren lesen nur so weit, bis sie zu einem \0 (String-Terminator) kommen, sehen also "" (leerer String) bzw. "te".



  • Ok du hast mir schon mal sehr geholfen.
    Eine kleine Frage zu den
    doppelten Anführungszeichen
    und einfache Anführungszeichen.

    Gibt es einen Unterschied ? ? ? Wenn ja welchen.

    Tut mir leid, dass ich euch mit diesen N00b Fragen belästige, aber aller anfang ist schwer.......



  • Doppelte Anführungszeichen markieren String-Literale (Zeichenketten), einfache stehen für char-Literale (Einzelzeichen).



  • KingSebo schrieb:

    ...

    Nimm std::string !!

    Du kannst jetzt noch viele Stunden lang mit diesen "C-Strings" (so nennt man die "char-Teile", die Du da nutzt) rumfrickeln ... oder in 10 Minuten mit der eigentlichen Arbeit anfangen.

    (Es kann natürlich sein, dass Du gar keine C++-, sondern nur eine C-Schnittstelle (merke: NICHT dasselbe) zu Deiner Konsole hast, dann gibt's da eben keine strings und Du musst bluten, aber das würde ich an Deiner Stelle mal als Erstes herausfinden (und ggf. mit Deinem Thread in das C-Unterforum umziehen).

    Gruß,

    Simon2.



  • Simon2 schrieb:

    (Es kann natürlich sein, dass Du gar keine C++-, sondern nur eine C-Schnittstelle (merke: NICHT dasselbe) zu Deiner Konsole hast, dann gibt's da eben keine strings und Du musst bluten,

    aber nicht zu sehr, denn auch wenn die Konsolen-Schnittstelle nur C-Strings kennt muss man nicht gleich die gesamte string-Klasse ueber Bord werfen und schon garnicht ins C-Forum umziehn (was ja bedeuten wuerde dass man auch sonst mit C++ bricht, oder?) - ein std::string::c_str() wirkt Wunder, dann klappts auch mit dem Nachbarn bzw. der Konsolen-Schnittstelle. Und wenn die wirklich so C-Oldscool ist, koennte man sich entweder nach einer anderen API bzw. einer Bibliothek umsehen, die eine entsprechende Schnittstelle mit std::string-Unterstuetzung umschauen, oder (wenn man sich tatsaechlich fuer die naechsten Wochen/Monate/Jahre mit dem Ding rumschlagen muss) sich eine entsprechende Wrapperklasse schreiben.



  • pumuckl schrieb:

    Simon2 schrieb:

    (Es kann natürlich sein, dass Du gar keine C++-, sondern nur eine C-Schnittstelle (merke: NICHT dasselbe) zu Deiner Konsole hast, dann gibt's da eben keine strings und Du musst bluten,

    aber nicht zu sehr, ...

    Du hast mich mißverstanden.
    Ich meinte: Er muss ja für eine andere Plattform kompilieren ... und wenn dieser Crosscompiler ein reiner C-Compiler ist, muss er bluten .... sehr. 😃

    (das meinte ich mit "Schnittstelle")

    Gruß,

    Simon2.


Anmelden zum Antworten