Meine char to string Funktion gibt immer leern string



  • Hi,bei folgendem Code lass ich mir ja in der Funktion einmal pro Schleifendurchlauf immer s[i] ausgeben,also den i-ten Buchstaben des Stings s.Da gibt er ja auch immer alles aus,bei cout << s; gibt er dann immer eine leere zeile statt des ganzen strings aus aus ??

    #include <iostream>
    #include <string>
    using namespace std;
    
    string to_string(char* );
    
    int main(int argc,char* argv[])
    {
    char array[30] = "Hello World!";
    string str;
    
    str=to_string(array);
    return 0;
    }
    
    string to_string(char* array )
    {
    int i = 0;
    string s = "" ;
     while (array[i]) 
     {
      s[i] = array[i] ;
      cout << s[i];
      ++i;
    
     }
    cout << s;
    return s;
    }
    

    Weiß wer an was es liegt?

    Xalon



  • while (array[i])
    

    Was ist denn das für eine Bedingung?

    array[i] == '\0'
    

    Wäre tendenziell richtiger...

    Noch effektiver wäre es allerdings einfach den += bzw. = operator des std::string zu verwenden.

    s = array;
    

    😃



  • Mathias schrieb:

    while (array[i])
    

    Was ist denn das für eine Bedingung?

    array[i] == '\0'
    

    Wäre tendenziell richtiger...
    [/cpp]
    😃

    array[i] == '\0'
    

    Ist das Selbe wie

    array[i] == 0
    

    Folgedessen ist while(array[i]) doch in Ordnung, wenn ich beim Nullterminator angelagt bin sollte die Schleife auch abbrechen...

    Aber wie gesagt die funktion kannst du dir sparen die string klasse stellt schon die Methoden dazu bereit 😉



  • Nur weils das gleiche Ergebnis liefert macht es das nicht besser. Man sollte es tunlichst vermeiden Zeichen als Zahlwerte zu codieren.
    🙂



  • Ok,danke euch,trotzdem würde ich gerne wissen wo der Fehler liegt 😉

    Xalon



  • Mathias schrieb:

    Nur weils das gleiche Ergebnis liefert macht es das nicht besser. Man sollte es tunlichst vermeiden Zeichen als Zahlwerte zu codieren.
    🙂

    Das ist was wahres dran 👍



  • string s = "";
    

    Das ist deine stringlänge 0. Wenn du dann s[i] = array[i] machst ist deine stringlänge immernoch Null. Der string wird nicht vergrößert...
    Du schreibst auf uninitalisiertem Speicher.

    Deswegen musst du ihm angeben wie groß er sein muss.

    string s = "";
    s.resize(strlen(array));
    

    oder in der Schleife es so machen:

    s += array[i];
    

    Denn operator+= sorgt dafür das der String wenn nötig sich vergrößert...
    😃



  • Ok,klingt logisch 😉

    Xalon



  • Man bin ich doof.

    array[i] == '\0'
    

    is verkehrt, viel mir gestern so beim Runterfahren ein. Muss natürlich

    array[i] != '\0'
    

    sein. Solange die Bedingung erfüllt ist wird die Schleife durchlaufen und nicht bis die Bedingung erfüllt ist.



  • Achtet eh keiner drauf ,aber intressant an was du beim Runterfahren so alles denkst 😃

    Xalon



  • Nach einem langen Arbeitstag werden die Gedankengänge kürzer... zusammenhangsloser... und die Gedankenblitze leuchten etwas heller dank leichter Umnachtung. 🙂


Anmelden zum Antworten