C-Strings und Zeiger - Verständnisfrage



  • Hallo

    Ich habe eine Frage zu C-strings. Ich möchte für einen String einen default Wert festlegen:

    char fn[]="sintable"; // default name of output file

    Nun möchte ich die Möglichkeit bieten diesen String durch einen anderen zu ersetzen:

    fn=argv[arg];

    Das wirft den Fehler: inkompatible Typen in Zuweisung

    Warum nun?

    fn ist doch ein array von Zeichen, also ein Zeiger auf 's' von "sintable", oder?
    Und argv[arg] ist auch ein array von Zeichen, also ein Zeiger auf das erste Zeichen des neuen Dateinamens.

    Warum ist das jetzt inkompatibel?

    Vielen Dank

    mfg appleman



  • ^^fn[] ist ein array, kein pointer. einem array kannste nix nachträglich zuweisen. du kannst es aber neu befüllen, z.b. mit 'strcpy'. musst aber bei der länge aufpassen. dein fn[] ist so lang, wie es buchstaben in "sintable" gibt +1 (wegen der 0 am ende).
    🙂



  • appleman schrieb:

    fn ist doch ein array von Zeichen, also ein Zeiger auf 's' von "sintable", oder?

    Nein. Ein Array ist ein Array und kein Zeiger. Man kann den Arraynamen zwar wie einen Zeiger weiterreichen; trotzdem ist das nicht das Gleiche.
    Und einem Array kann man nicht einfach ein anderes Array zuweisen.

    Nimm Dir einen Zeiger zusätzlich:

    char fn[]="sintable";
    char *Zeiger;

    und dann:

    Zeiger = fn;
    ...
    Zeiger = argv[arg];



  • Hallo

    Vielen Dank

    ich glaub jetzt hab ichs kapiert. Ich dachte immer ein C nehme das nicht so genau mit den Unterschied zwischen array und Zeiger.

    Ich hab jetzt:

    char *fn="sintable"; // default name of output file

    Jetzt gehts

    mfg appleman



  • appleman schrieb:

    Ich dachte immer ein C nehme das nicht so genau mit den Unterschied zwischen array und Zeiger.

    das ist ein riesiger unterschied. und den sollte jeder C-programmierer kennen.
    🙂



  • appleman schrieb:

    Hallo

    Vielen Dank

    ich glaub jetzt hab ichs kapiert. Ich dachte immer ein C nehme das nicht so genau mit den Unterschied zwischen array und Zeiger.

    Ich hab jetzt:

    char *fn="sintable"; // default name of output file

    Jetzt gehts

    mfg appleman

    Dir ist aber klar, daß Dein 'default name' dann nicht mehr erreichbar ist, sobald Du fn auf irgend etwas anderes zeigen lässt?!



  • Ja ja, das ist mir klar. Wozu auch.



  • Keine Ahnung wozu. Ist ja nicht ausgeschlossen, daß man den String später noch mal für irgendwas braucht. Wenn das in Deiner Anwendung nicht so ist, dann kannst Du es so machen.



  • +fricky schrieb:

    appleman schrieb:

    Ich dachte immer ein C nehme das nicht so genau mit den Unterschied zwischen array und Zeiger.

    das ist ein riesiger unterschied. und den sollte jeder C-programmierer kennen.
    🙂

    Die Semantik zieht da aber leider keine klaren Grenzen, wie ich mich selbst eines besseren belehren lassen musste:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-242643-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html
    Die Aussage "C nimmt es mit den Zeigern nicht so genau." ist insofern nicht falsch.



  • klar0r schrieb:

    +fricky schrieb:

    appleman schrieb:

    Ich dachte immer ein C nehme das nicht so genau mit den Unterschied zwischen array und Zeiger.

    das ist ein riesiger unterschied. und den sollte jeder C-programmierer kennen.
    🙂

    Die Semantik zieht da aber leider keine klaren Grenzen, wie ich mich selbst eines besseren belehren lassen musste:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-242643-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html
    Die Aussage "C nimmt es mit den Zeigern nicht so genau." ist insofern nicht falsch.

    doch, C nimmt es sehr genau mit Zeigern und Arrays, Als Parameter von Funktionen ist das eine Ausnahme, die einzige, soweit ich weiß.


Anmelden zum Antworten