String an Funktion übergeben

Diskutiere String an Funktion übergeben im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hallo! Erstmal vorweg, weshalb ist die Textverarbeitung (string, char, input-methoden) eigentlich so kompliziert unter C++? Oder kommt nur mit...

  1. #1 gruenpflanze, 26.08.2007
    gruenpflanze

    gruenpflanze Mitglied

    Dabei seit:
    25.06.2007
    Beiträge:
    26
    Zustimmungen:
    0
    Hallo!
    Erstmal vorweg, weshalb ist die Textverarbeitung (string, char, input-methoden) eigentlich so kompliziert unter C++? Oder kommt nur mit das so kompliziert vor?

    Folgendes vereinfachtes Programm soll mein Problem zeigen:
    Ich habe eine string Variable, die ich an eine Funktion übergeben will damit diese verarbeitet werden kann.

    Code:
    #include <iostream>
    #include <string>
    using namespace std;
    string test(string hallo); //deklarierung der Funktion
    string hallo="hehey"; 
    int main()
    {
    test(hallo); //test wird aufgerufen und hallo übergeben.
    }
    
    string test(string hallo)
    {
    cout << ""<<hallo;
    }
    
    Der Output schaut so aus:
    Ich vermute, dass es am Gültikeitsbereich der Stringvariable liegt. Kann es sein, dass der Pointer in der Funktion schon ins Leere zeigt? Bin mit der Fehlermeldung überfordert.
    Vielen Dank!
    Ach ja, der Fehler wird zur laufzeit ausgegeben, d.h. das kompilieren mit c++ (unter debian) hat funktioniert.

    Danke!
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Mµ*e^13.5_?¿, 26.08.2007
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Also an dem Programm ist eigentlich alles einwandfrei in Ordnung.
    Ausgabe sieht aus wie folgend:
    Kompiliert mit "g++ (GCC) 4.1.3 20070812 (prerelease) (Debian 4.1.2-15)".
     
  4. #3 marcellus, 26.08.2007
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Und weil du den string global deklariert hast solltest du im unterprogramm auch ohne übergabe drauf zugreifen können.

    Sehr sauber ist die verwendung von globalen variablen allerdings nicht.
     
  5. #4 gruenpflanze, 26.08.2007
    gruenpflanze

    gruenpflanze Mitglied

    Dabei seit:
    25.06.2007
    Beiträge:
    26
    Zustimmungen:
    0
    Code:
    *@debian:~/maturaarbeit/tests$ [B]gcc string.cpp[/B]
    string.cpp:14:2: warning: no newline at end of file
    /tmp/ccOHo2y4.o: In function `__tcf_1':
    string.cpp:(.text+0xe): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
    /tmp/ccOHo2y4.o: In function `__static_initialization_and_destruction_0(int, int)':
    string.cpp:(.text+0x40): undefined reference to `std::ios_base::Init::Init()'
    string.cpp:(.text+0x67): undefined reference to `std::allocator<char>::allocator()'
    string.cpp:(.text+0x82): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
    string.cpp:(.text+0x8d): undefined reference to `std::allocator<char>::~allocator()'
    string.cpp:(.text+0xbc): undefined reference to `std::allocator<char>::~allocator()'
    /tmp/ccOHo2y4.o: In function `__tcf_0':
    string.cpp:(.text+0xfa): undefined reference to `std::ios_base::Init::~Init()'
    /tmp/ccOHo2y4.o: In function `test(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
    string.cpp:(.text+0x111): undefined reference to `std::cout'
    string.cpp:(.text+0x116): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
    string.cpp:(.text+0x127): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /tmp/ccOHo2y4.o: In function `main':
    string.cpp:(.text+0x151): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    string.cpp:(.text+0x171): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
    string.cpp:(.text+0x17c): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
    string.cpp:(.text+0x197): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
    /tmp/ccOHo2y4.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
    collect2: ld gab 1 als Ende-Status zurück 
    
     
  6. #5 marcellus, 26.08.2007
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    gcc ist der C compiler g++ ist der C++ compiler.

    Das Packet gcc steht überigens nicht mehr für Gnu C Compiler, sondern gür Gnu Compiler Collection, deswegen kanns leicht sein, dass ein Neuling verwirrt wird, lass dich davon nicht zurückwerfen.
     
  7. #6 gruenpflanze, 26.08.2007
    gruenpflanze

    gruenpflanze Mitglied

    Dabei seit:
    25.06.2007
    Beiträge:
    26
    Zustimmungen:
    0
    Danke.
    Aber auch mit dem Compiler "c++" oder "g++" oder was es sonst noch alles gibt auf einer linux-maschine geht es nicht. Siehe 1. Post.
    An was könnte es noch liegen? Hat jemand eine Idee?
     
  8. #7 Lord Kefir, 26.08.2007
    Lord Kefir

    Lord Kefir König

    Dabei seit:
    10.06.2004
    Beiträge:
    945
    Zustimmungen:
    0
    Deine test()-Funktion ist falsch. Sie gibt nämlich keinen String zurück, obwohl sie es laut Deklaration tun muss.

    Kleiner Tipp: benutze beim kompilieren -Wall als Parameter.


    Mfg,
    Lord Kefir
     
  9. #8 Mµ*e^13.5_?¿, 26.08.2007
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Das ist so natürlich richtig, es sollte aber nicht zu dem Fehler führen, wie es das bei ihm tut.
    Wenn ich mich recht erinnere ist es nach dem ISO-Standard übrigens erlaubt in einer Funktion entgegen der Funktionsdeklaration keinen Wert zurückzugeben, es führt allerdings zu undefiniertem Verhalten, wenn man den Wert, den die Funktion dann zurückgibt benutzt.
     
  10. #9 Lord Kefir, 26.08.2007
    Lord Kefir

    Lord Kefir König

    Dabei seit:
    10.06.2004
    Beiträge:
    945
    Zustimmungen:
    0
    Ich lasse mich jetzt nicht auf eine C++-Diskussion ein, weil ich zwar in diversen Sprachen programmiere, aber nicht in C++ ;)

    Ich fände es auch krass, wenn es wirklich nur daran liegen sollte. Bei mir klappt's aber mit einer void-Deklaration - oder wenn test() einen String zurückgibt:
    Code:
    #include <iostream>
    #include <string>
    using namespace std;
    
    string hallo="123";
    string test(string hallo);
    int main() {	
    	test(hallo);
    }
    
    string test(string hallo)
    {
    	string x;
    	cout<<""<< hallo;
    	return x;
    }
    
    Der Rest des Codes sieht schließlich korrekt aus.


    Mfg,
    Lord Kefir
     
  11. #10 marcellus, 26.08.2007
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    stimmt schon das hat er nicht gern, wundert mich eigentlich, dass er das warning nicht auch ohne wall ausgibt

    Ich finds cool, dass es bei dir mit einem return value geht, ich muss lediglich
    Code:
    string hallo="hehey\0";
    einbauen, dass es funktioniert, wenn ich das nicht drinnen hab auch ein segfault, aber das ist durchaus begründet.

    Ich find das aber ziemlich cool, weil die version von Lord Kefir bei mir auch wunderbar läuft, obwohl du auch keine stringterminierung eingebaut hast. Nur rein verständnishalber, muss man das "\0" in c++ strings einbauen?

    Btw Lord Kefir wenn ich bei deinem Programm den return wert weggeb funktionierts auch nicht, auch nicht wenn ich das "\0" als stringterminierung in die initialisierung schreib.:think:

    Mir kommt das ganze ziemlich suspekt vor.

    Kompiliert mit g++ (GCC) 4.1.2 (Gentoo 4.1.2)
     
  12. #11 Mµ*e^13.5_?¿, 27.08.2007
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Mir kommt das ganze sehr merkwürdig vor, es scheint ja kein Fehler im Code zu sein.
    gruenpflanze, hast du mal den Debugger angeworfen und nachgesehen, wo genau das Programm abbricht?
    Ich verstehe nicht, warum?

    Code:
    "blahblah"; /* Ist ein null-terminierter String, in C wie in C++. */
     
  13. #12 marcellus, 27.08.2007
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Code:
    "blahblah"; /* Ist ein null-terminierter String, in C wie in C++. */
    Stimmt jetzt kommts mir erst mich wunderts trotzdem, dass es mit der "zweiten" terminierung dann hinhaut, aber egal deswegen heists ja nicht definiert.

    Also im endeffekt kommen wir zu dem ergebnis, dass die beendigung einer non void funktion ohne return wirklich nicht definiert ist?

    war aufs "\0" bezogen, hat sich damit aber auch erledigt
     
  14. #13 Lord Kefir, 27.08.2007
    Zuletzt bearbeitet: 27.08.2007
    Lord Kefir

    Lord Kefir König

    Dabei seit:
    10.06.2004
    Beiträge:
    945
    Zustimmungen:
    0
    Ich habe hier gerade auf der Arbeit versucht den Code mit Visual Studio zu kompilieren - und siehe da: es geht nicht.

    Liegt definitiv am Rückgabewert.


    Mfg,
    Lord Kefir
     
Thema: String an Funktion übergeben
Besucher kamen mit folgenden Suchen
  1. c string übergeben

    ,
  2. c string an funktion übergeben

    ,
  3. string übergeben c

    ,
  4. zeichenkette an funktion übergeben c,
  5. zeichenkette an funktion übergeben,
  6. String parameter in C Funktionen übergeben,
  7. c strings an funktionen übergeben,
  8. funktion string übergeben,
  9. c string einer funktion übergeben,
  10. c# const string an funktion übergeben,
  11. c char string übergeben,
  12. übergebe string zu char *aber argumentliste stimmt nicht überein,
  13. c std::string an funktion übergeben,
  14. c funktion zeichenkette übergeben,
  15. c char an funktion übergeben,
  16. c# strings übergeben,
  17. in c string übergeben,
  18. c# string als parameter an funktion übergeben,
  19. c string als referenz übergeben,
  20. string in c übergeben,
  21. string[] übergeben,
  22. string und int übergeben,
  23. suchstring übergeben,
  24. c string übergebe.,
  25. c funkction string übergeben
Die Seite wird geladen...

String an Funktion übergeben - Ähnliche Themen

  1. [gelöst] [php] für Webservice aus string einzelne funktionsparameter rausholen

    [gelöst] [php] für Webservice aus string einzelne funktionsparameter rausholen: hallo, ich habe folgendes Problem und hoffe, dass jemand da etwas hilfestellung geben kann. ich habe einen string, der hat die form...
  2. perl Hochkommata um Worte im String einfügen?

    perl Hochkommata um Worte im String einfügen?: Hallo, $attributes=' cn dn uid ' wie fasse ich alle Worte in Hochkommata, so dass $attributes=' "cn" "dn" "uid" ' ist? Danke Tom
  3. leerzeichen vor und nach einem STRING löschen

    leerzeichen vor und nach einem STRING löschen: Hallo Zusammen, ich muss in einer Datei die LEERZEICHEN vor und nach einem STRING entfernen, aber nicht innerhalb des Strings. Die STRINGS sind...
  4. Teilstring extrahieren

    Teilstring extrahieren: Hallo zusammen, ich suche nach einer Möglichkeit aus einem String einen Teil auszuschneiden. Gegeben sei z.B. der String: * fcid 0xb400a0 [pwwn...
  5. Dateien in Unix finden, die mehrere Strings beinhalten

    Dateien in Unix finden, die mehrere Strings beinhalten: Hallo liebe Leute, ich versuche über die Shell unter Unix alle Dateien ausfindig zu machen, die sowohl den SuchstringA als auch den SuchstringB...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden