char struct Zugriff seltsam? bitte um Hilfe



  • ok hier mal ein code:
    also Token.h

    #ifndef TOKEN_H_
    #define TOKEN_H_
    struct Token{
    	char art [20];
    	char wert[20];	
    };
    #endif /*TOKEN_H_*/
    

    und hier das c file:

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <string.h>
    #include "Token.h"
    
    struct Token sym;
    
    int main(){
    	printf("%s\n","Vergleichstest");
    	sym.wert[0]='r';
    	sym.wert[1]='e';
    	sym.wert[2]='s';
    	sym.wert[3]='u';
    	sym.wert[4]='l';
    	sym.wert[5]='t';
    	printf("%s\n",sym.wert); //gibt result aus ! 
    
    	//strcpy(sym.wert,"return"); // wenn ich das im code lasse funktioniert es !
    
    	if(strcmp(sym.wert,"return")==0){
    		printf("%s\n","im if");	
    	}
    
    return 0;	
    }
    

    wenn ich dem sym.wert die zeichen mit [] zuweise funktioniert der vergleich nicht. Leider bekomme ich von der software die zeichen nur einzeln daher. Wenn man hingegen mit strcpy den wert in sym.wert hineinkopiert geht der vergleich, was ist hier los?
    danke



  • result != return
    sym.wert hat bei dir doch verschiedene strings, je nach methode...



  • sorry da hab ich mich jetzt in der eile verschrieben sollte nicht result heißen, hm es muss wohl wo anders der hacken sein, wenn ich nicht mehr weiter komm meld ich mich nochmal danke euch für die prompte hilfe !



  • Du musst die Zeichenkette auch (wie es strcpy auch tun würde) mit 0 abschließen:

    sym.wert[6] = '\0'; // man könnte auch 0 schreiben aber so sieht man sofort was gemeint ist
    


  • LordJaxom schrieb:

    Du musst die Zeichenkette auch (wie es strcpy auch tun würde) mit 0 abschließen:

    sym.wert[6] = '\0'; // man könnte auch 0 schreiben aber so sieht man sofort was gemeint ist
    

    Sollte bei dem Beispiel aber nicht das Problem sein, da die globale Struktur sym ja nach den bekannten Regeln initialisiert wird.
    Aber ist auch egal, wer nicht in der Lage ist den richtigen Code zum Problem zu posten... 🙄



  • sym.wert[6] = '\0';
    

    vielen Dank das hat dem String zum Vergleichen also gefehlt.

    @Tim
    Hast dich wohl noch nie verschrieben was.

    An die andren Danke für die Hife hier.



  • 1metal3 schrieb:

    @Tim
    Hast dich wohl noch nie verschrieben was.

    Sich in normaler Sprache zu verschreiben ist nicht das Problem, das menschliche Gehirn ist intelligent genug das zu korrigieren. Bei einem programmiertechnischen Problem ist das total anders. Ein Compiler verzeiht dir sowas nicht. Nicht zuletzt deswegen hat ein langjähriges Mitglied hier einen sehr wichtigen Hinweis gegeben:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-988781.html#988781

    Und weil du eben deinen Code falsch abgeschrieben hast, sind es jetzt 12 anstatt nur 2 Beiträgen. Aber das ist nicht das Problem. Dafür sind wir ja da...



  • @Tim
    Ich habe versucht den langen Programm Code nicht zu posten um die Übersichtlichkeit nicht zu verlieren. Deswegen habe ich schnell obrigen Code geschrieben und mich dabei vertippt. Das tut mir leid 🙂

    trotzdem danke für die überaus rasche und freundliche Hilfe



  • Was mich aber interessieren würde: Aus welchen Buch, Tutorial stammt der Code?

    Scheint ja um Compilerbau zu gehen 🙂



  • Leitfaden is das Buch Compilerbau vom Wirth. (allerdings ist da nur Oberon drin)


Anmelden zum Antworten