C-Routinen von Windows nach GNU/Linux



  • Hallo,

    erstmal vielen Dank für eure Infos. Wie ihr sicherlich gemerkt habt, bin ich nicht der hellste in Sachen C.

    Leider läuft der Code unter Gnu/Linux immer noch nicht. Wird aber sicherlich irgendwann mal so sein.

    Ich habe mal die Fehlermeldungen des GNU/C Compilers kopiert:

    Dies sind die Fehlermeldungen, nach den Änderungen von "was auch immer".

    test2.cpp: In function char* substr(const char*, int, int)': test2.cpp:52:exit' undeclared (first use this function)
    test2.cpp:52: (Each undeclared identifier is reported only once for each
    function it appears in.)
    test2.cpp: In function char* ltrim(char*)': test2.cpp:95:isspace' undeclared (first use this function)
    test2.cpp:107:2: warning: no newline at end of file

    Dies sind die Fehlermeldungen meines Original-Skripts.

    test.c:1:18: string: Datei oder Verzeichnis nicht gefunden
    test.c:5: warning: conflicting types for built-in function strlen' test.c: In functionmain':
    test.c:12: warning: return type of `main' is not `int'
    test.c: In function strlen': test.c:40:for' loop initial declaration used outside C99 mode
    test.c: In function substr': test.c:49: warning: passing arg 1 ofstrlen' discards qualifiers from pointer target type
    test.c:49: warning: passing arg 1 of strlen' discards qualifiers from pointer target type test.c:54: invalid lvalue in assignment test.c:55:new' undeclared (first use in this function)
    test.c:55: (Each undeclared identifier is reported only once
    test.c:55: for each function it appears in.)
    test.c:55: parse error before "char"
    test.c:58: invalid lvalue in assignment
    test.c:105:2: warning: no newline at end of file

    Vielleicht hat ja jemand noch Lust, mal nachzuschauen.

    Erstmal Danke und schöne Grüße 🙂
    Dannyc



  • dannyc schrieb:

    test2.cpp: In function char* substr(const char*, int, int)': test2.cpp:52:exit' undeclared (first use this function)

    verschwindet mit:
    #include <stdlib.h>
    oder
    #include <cstdlib>

    dannyc schrieb:

    test2.cpp: In function char* ltrim(char*)': test2.cpp:95:isspace' undeclared (first use this function)

    verschwindet mit:
    #include <ctype.h>

    dannyc schrieb:

    test2.cpp:107:2: warning: no newline at end of file

    blödsinnigste gcc-warning die es gibt. geh ans ende deines sourcecodes und drücke einfach <enter>. weg ist es.



  • net schrieb:

    dannyc schrieb:

    test2.cpp:107:2: warning: no newline at end of file

    blödsinnigste gcc-warning die es gibt. geh ans ende deines sourcecodes und drücke einfach <enter>. weg ist es.

    wird das nicht vom C++ Standard so gefordert? Naja, eine gute IDE könnte, einfach immer ein \n an Code Dateien hängen 🙄



  • kingruedi schrieb:

    wird das nicht vom C++ Standard so gefordert?

    wenn ja, dann haben die verfasser aber vorher ein paar tüten geraucht 🙂



  • Hallo!

    nochmals vielen Dank für eure Hilfe. Ich bin leider noch nicht dazu gekommen, euch was zu schreiben. A little Bit Stress.

    Hab jetzt mal alle Änderungen gemacht und den ganzen Kram nochmals durch den GNU-Compiler gejagt. Was soll ich sagen. Die Fehlermeldungen werden immer weniger! 😉

    Ich hab die aktuellen Meldungen nochmal mitgebracht.

    /tmp/ccKwKgol.o: In function substr(char const*, int, int)': /tmp/ccKwKgol.o(.text+0x171): undefined reference tooperator new[](unsigned)'
    /tmp/ccKwKgol.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status

    Mal ehrlich, ich finde das ziemlich "idiotisch", das man am Ende des Codes einen Return einfügen muss. Was hat das für einen sinnvollen Zweck? Wahrscheinlich wollten die Verfasser von C++ unbedingt noch eine Fehlermeldung unterbringen. Auf Teufel komm raus. Naja, muss man halt mit leben.

    Würde mich freuen, nochmals von euch zu hören.

    Schöne, sonnige Grüße
    Dannyc



  • Linker mit g++ aufrufen, nicht gcc.



  • Hallo!

    Ich habs jetzt mit g++ kompiliert und es hat geklappt. Er speichert mir jetzt eine Datei a.out. Linux zeigt diese als "Ausführbare Datei" an. Wenn ich jedoch in der Konsole a.out angebe, kriege ich die Meldung "Befehl nicht gefunden". Benenne ich das Ding um, in bspw: programm od. test dann klappt es auch nicht. Normalerweise muss ich doch die Textausgaben auf den Schirm sehen, oder?

    Vielleicht weiss ja einer Rat.

    Schöne Grüße
    Dannyc



  • ./a.out
    oder
    ./programm
    


  • Hallo!

    Wenn ich mein Programm jetzt mit bspw. ./a.out aufrufe, dann erhalte ich folgende Meldung "SPEICHERZUGRIFFSFEHLER". Warum? Was kann ich dagegen tun?

    Schöne Grüße
    Dannyc



  • Das heißt, daß du igendwo in deinem Programm auf Speicher zugreifst, der dir nicht gehört (z.B. über die Array-Grenzen hinaus o.ä.). Du könntest mal mit dem Debugger durch das Programm gehen und den Fehler suchen.



  • RTFM / RTFF.

    . ist nicht im Pfad, daher ./a.out



  • Ringding schrieb:

    RTFM / RTFF.

    . ist nicht im Pfad, daher ./a.out

    Bitte? Leider habe ich deine Aussage nicht so ganz verstanden! RTFM??!?!?!??!?!?



  • Das heißt: Read The Fucking Manual / Read The Fucking FAQ

    (aber die eigentliche Frage war ja schon beantwortet)



  • fubar schrieb:

    Das heißt: Read The Fucking Manual / Read The Fucking FAQ

    (aber die eigentliche Frage war ja schon beantwortet)

    Wieder was neues gelernt! Danke!



  • net schrieb:

    kingruedi schrieb:

    wird das nicht vom C++ Standard so gefordert?

    wenn ja, dann haben die verfasser aber vorher ein paar tüten geraucht 🙂

    ... ich würde einfach sagen, dass jede gültige Textdatei zumindest unter Unix auf einen Zeilenumbruch endet. Dadurch wird auch keine neue Zeile begonnen, sondern nur die angefangene abgeschlossen. Ist (zumindest unter Unix) so üblich.

    Zum Testen: Mit einem Texteditor unter Unix eine Textdatei erstellen, die nur eine Zeile enthält mit dem Inhalt "foobar" und als foobar.txt speichern. "cat foobar.txt|hexdump" wird dir den Zeilenumbruch dann zeigen.



  • fubar schrieb:

    Das heißt: Read The Fucking Manual / Read The Fucking FAQ

    (aber die eigentliche Frage war ja schon beantwortet)

    öhm, Fucking bitte durch Fine ersetzen 😉


Anmelden zum Antworten