Einfach nur einen String ausgeben (char*) ...



  • Hallo,

    ich scheitere wieder mal an einfachstem C.
    Folgender Code funktioniert:

    char test[6];
      test[0] = 'H';
      test[1] = 'A';
      test[2] = 'L';
      test[3] = 'L';
      test[4] = 'O';
      test[5] = '\0';
      printf("%s", test);
    

    Folgender Code geht nicht:

    char* test2 = (char*) malloc(255 * sizeof(char));
      *test2 = 'H';
      *(++test2) = 'A';
      *(++test2) = 'L';
      *(++test2) = 'L';
      *(++test2) = 'O';
      *(++test2) = '\0';
      printf("%s", test2);
    

    Hat irgendwer eine sinnvollen Hinweis warum?!

    mfg, guni



  • Worauf zeigt denn test2 in Z.8? 😉



  • Ja ... auf den nullchar. Das hab ich inzwischen auch entdeckt. Aber das würde ja bedeuten, dass ich mir den startpointer merken muss und dann fürs durchiterieren einen zweiten pointer brauche, oder? Zwei pointer nur um einen String anzulegen?!



  • Mach doch einfach strncpy oder memcpy , wenn du Binärdaten setzen willst. Die Funktionen machen sich automatisch eine Kopie des Zeigers.



  • guni schrieb:

    Aber das würde ja bedeuten, dass ich mir den startpointer merken muss und dann fürs durchiterieren einen zweiten pointer brauche, oder? Zwei pointer nur um einen String anzulegen?!

    Das tut es.
    Den Zeiger auf den Anfang Deines allozierten Speicherbereichs wirst Du auf jeden Fall wieder brauchen, wenn Du free() aufrufst.
    Zwei Zeiger zu haben ist aber auch nix schlimmes.

    Alternativ kannst Du ja auch einfach den fertigen String reinkopieren.

    #include <string.h>
    ...
    char* test2 = malloc(255);
    strcpy(test2, "Hallo");
    


  • Was spricht gegen:

    const char* str = "test";
    

    Oder, wenn du es bearbeiten willst:

    char str[] = "test";
    

    ?



  • Dass ich EIGENTLICH eine Methode schreiben will, die mir einen vector<int> in einen const char* umwandelt, also z.b in "[1, 2, 3, 4, 5]".



  • Dann nimm sprintf in einer Schleife.


  • Mod

    guni schrieb:

    Dass ich EIGENTLICH eine Methode schreiben will, die mir einen vector<int> in einen const char* umwandelt, also z.b in "[1, 2, 3, 4, 5]".

    Also C++? Da hast du doch ganz andere Möglichkeiten...



  • Ich hab kein sprintf. Und auch keine string.h ...


  • Mod

    guni schrieb:

    Ich hab kein sprintf. Und auch keine string.h ...

    Verloren gegangen?



  • guni schrieb:

    Ich hab kein sprintf. Und auch keine string.h ...

    Dann wechsele den Compiler. Der Header und die Funktion sind standardisiert durch C89 und C99. Wenn dein Compilerhersteller die nicht liefert, gilt das gleiche für Lehrer, die noch mental in den 90ern programmieren => wechseln.



  • guni schrieb:

    Ich hab kein sprintf. Und auch keine string.h ...

    Ich hab nur std::vector<char>, sonst nix, absolut nix. Haha. Manche posts sind so traurig, daß sie schon wieder lustig sind.



  • Weil?



  • guni schrieb:

    Weil?

    guni schrieb:

    Ich hab kein sprintf. Und auch keine string.h ...

    Weil dieser Header / diese Funktion bei jeder halbwegs brauchbaren Standardbibliothek existiert.
    Wie kommst du denn darauf dass das bei dir fehlt ?



  • guni schrieb:

    Weil?

    Manchmal hilft ein

    #include
    

    Daß es sprintf nicht gibt, gibt es eigentlich gar nicht.


Log in to reply