string initialisieren?



  • Bei folg. code funktioniert alles wie es soll. Lasse ich aber bei der Deklaration von char PfadDatName[30] die Zuweisung "" weg, sehe ich bei der printf-Ausgabe, das er 3 Zeichen vor dem Laufwerksbuchstaben setzt. Wird der Speicher beim anlegen einer Variablen nicht automatisch auf 0 gesetzt?

    #define Pfad "C:\\Temp\\"
    #define Extension ".txt"
    .
    .
    char DatName[12];
    char PfadDatName[30]="";
    .
    printf("\n\n\n\t\tGeben Sie den Dateinamen an: ");
       fflush(stdin);
       gets(DatName);
       strcat(DatName,Extension);
       strcat(PfadDatName,Pfad);
       strcat(PfadDatName,DatName);
       pfile=fopen(PfadDatName,"wb");
    //pfile=fopen("c:\\Temp\\Test.txt","w");
    printf("%s",PfadDatName);
    


  • plc_tippser schrieb:

    Wird der Speicher beim anlegen einer Variablen nicht automatisch auf 0 gesetzt?

    nee, nicht bei normalen lokalen variablen, also bei denen, die auf dem stack liegen (auto-variablen). bei denen, die im daten-segment oder gar im rom-segment liegen (globale variablen oder lokale static-variablen) kannste von initialisierung mit 0 ausgehen.



  • Sprich, das "" ist schon ok?

    Ich habe noch ein ähnliches Problem. Wenn ich erst z.B. "Mercedes_Benz" eingebe und beim nächsten Umlauf "BMW", dann speichert er mir "BMW des_Benz". Deshalb führe ich erst das strcpy aus. Ist das auch OK oder geht das alles noch eleganter?

    strcpy(Auto.Typ,"                   ");
    printf("\n\n\n\t\tGeben Sie den Fahrzeugtyp ein: ");
    fflush(stdin); 
    scanf("%20s",Auto.Typ);
    

    Grüße pt



  • "" statt "[viele Leerzeichen]" reicht auch, da er eine 0 an die erste (0.) Position schreibt und jegliche Ausgaben eines Strings nur bis zum ersten 0-Zeichen ('\0') gehen.

    MfG SideWinder



  • fflush(stdin); ist nicht definiert
    siehe FAQ



  • SideWinder schrieb:

    "" statt "[viele Leerzeichen]" reicht auch, da er eine 0 an die erste (0.) Position schreibt und jegliche Ausgaben eines Strings nur bis zum ersten 0-Zeichen ('\0') gehen.

    MfG SideWinder

    Das hatte ich schon probiert, gerade aber extra noch einmal. Bei der 2. Eingabe steht dann schon BMW edes_Benz in der Datei.

    @shade
    ich habe Deinen Beitrag schon gesehen, steht auch noch auf meiner Inputliste, aber wenn es solche Störungen auslöst, dann kurze Info nochmal, dann ziehe ich´s natürlich vor 😉



  • Möglicherweise liegt es an %20s, dass du nach BMW noch was stehen hast.


Anmelden zum Antworten