problem beim schreiben von pointern die an funktion übergeben wurden



  • Was zum ...
    Dein Code ist lupenreines C bis auf den <iostream> -Header und das ge cout e. Soll das ein schlechter Scherz sein?

    Du machst so ziemlich alles falsch. Nicht nur, dass du UB erzeugst indem du String-Literale im Speicher überschreibst, du versuchst Element für Element einem 256 Zeichen langen String einem 33 langen zuzuweisen.
    Deswegen funktioniert deine Zeile vermutlich nicht.

    Das sieht mir stark nach einem Troll aus.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89, C99 und C11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Sone schrieb:

    Das sieht mir stark nach einem Troll aus.

    Ich denke, hier ist Hanlon's razor angebracht.



  • SeppJ schrieb:

    Sone schrieb:

    Das sieht mir stark nach einem Troll aus.

    Ich denke, hier ist Hanlon's razor angebracht.

    ignorantia legis neminem excusat



  • Sone schrieb:

    Was zum ...
    Dein Code ist lupenreines C bis auf den <iostream> -Header und das ge cout e. Soll das ein schlechter Scherz sein?

    Du machst so ziemlich alles falsch. Nicht nur, dass du UB erzeugst indem du String-Literale im Speicher überschreibst, du versuchst Element für Element einem 256 Zeichen langen String einem 33 langen zuzuweisen.
    Deswegen funktioniert deine Zeile vermutlich nicht.

    Das sieht mir stark nach einem Troll aus.

    ??? also ich mache so ziemlich alles falsch... nehm ich mal so hin....
    Soll das ein schlechter Scherz sein? <- was genau ist hier gemeint?
    UB=überlauf ? (mist... ich sehe es ein)
    das sieht mir stark nach einem troll aus ? <- wtf? also wie jetzt troll ?

    mfg benny



  • Soll das ein schlechter Scherz sein? <- was genau ist hier gemeint?

    Ob das ganze ein schlechter Scherz ist, oder nicht. (Leider nicht 😞 )

    UB=überlauf ? (mist... ich sehe es ein)

    Nein, nein, UB ist eine englische Abkürzung für undefined behavior, was im Deutschen undefiniertes Verhalten heißt.

    das sieht mir stark nach einem troll aus ? <- wtf? also wie jetzt troll ?

    Ach, vergiss es.
    (Bist nicht genug im Internet unterwegs, nicht wahr?)



  • McMorf schrieb:

    Soll das ein schlechter Scherz sein? <- was genau ist hier gemeint?

    Das dein Code von vollkommener Inkompetenz zeugt, was die Unterscheidung zwischen C und C++ angeht.
    Wenn dich jemand fragt, was du programmierst, wirst du vermutlich C++ antworten (weils auch nur unter C++ kompiliert).
    Dann ist das grottiger Stil, denn so programmiert man in C. In C++ macht man so etwas nicht.
    Wenn du C++ lernen willst, besorge dir ein vernünftiges Buch.
    Wenn du C lernen willst, vergiss cout und besorge dir ein vernünftiges Buch.



  • sehr hilfreiche beiträge... muss ich schon sagen....
    ich frage um hilfe und ihr(so leute wie Nathan) sagt mir nur dass ich doof/inkompetent oder was weis ich nicht bin...
    naja wie soll ich sagen ?!? wenn ich mich für so schlau halten würde, würde ich ja nicht in foren nach hilfe fragen 😛

    Mfg Benny



  • Das ist nicht böse gemeint, sondern eher erschrocken.



  • McMorf schrieb:

    sehr hilfreiche beiträge... muss ich schon sagen....
    ich frage um hilfe und ihr(so leute wie Nathan) sagt mir nur dass ich doof/inkompetent oder was weis ich nicht bin...
    naja wie soll ich sagen ?!? wenn ich mich für so schlau halten würde, würde ich ja nicht in foren nach hilfe fragen 😛

    Mfg Benny

    Hallo Benny,

    nimm es nicht so schwer. Das Lernen einer Programmiersprache gestaltet sich anfangs als schwierig. Gerade wenn es sich um C bzw. C++ handelt.

    Entscheide dich, ob du C oder C++ programmieren willst, und nimm dir dann die Suchfunktion und such nach Buchempfehlungen. Es gibt zwar im Internet auch viele Infos, aber oft ist es einfach fehlerhaft und die Leute lernen müll...

    UB heißt Undefined Behaviour und bedeutet Undefiniertes Verhalten. Dein Programm könnte möglicherweise also das machen, was du willst, aber es könnte auch etwas absurdes machen - das Verhalten ist eben undefiniert und damit nicht mehr vorhersehbar. Das ist das schlimmste, was einem passieren kann.



  • was ist jetzt so erschreckend ? das ich c und c++ vermische ?
    oder das ich im falschen sub-forum gepostet hab ?

    erzähl mir bitte was dich so erschreckt, dann kann ich drann arbeiten...
    ich will ja lernen, nur dafür brauch ich auch manchmal die passende hilfe 🙂

    mfg benny



  • Schau dir schon mal folgendes an:

    char *t1=(char*)"test string string string input";
    char *t2=(char*)"string ";
    

    Du erzeugst damit konstante String-Literale. Und dann versuchst du später darauf zu operieren und Zeichen zu entfernen, etc. Das ist nicht möglich und erzeugt wenn du Glück hast einen Crash oder es ergibt sich das besagte UB.



  • Das ist nicht möglich und erzeugt wenn du Glück hast einen Crash oder es ergibt sich das besagte UB.

    Nun es ist vom Sprachstandard nicht definiert. Das bedeutet aber noch lange nicht, dass es durch den Kompiler nicht erlaubt wird.

    Das ist nicht möglich und erzeugt

    Und ob das moeglich ist, nur wird es durch den Standard nicht definiert.



  • [/code]
    char *t1=(char*)"test string string string input";
    char *t2=(char*)"string ";
    [code="c"]

    Du erzeugst damit konstante String-Literale. Und dann versuchst du später darauf zu operieren und Zeichen zu entfernen, etc. Das ist nicht möglich und erzeugt wenn du Glück hast einen Crash oder es ergibt sich das besagte UB.

    ok das habe ich verstanden, das war mal nen hilfreicher tipp... ziemlich blöd von mir 🙂


  • Mod

    Leute, regt euch mal wieder ab. Was ist denn auf einmal los hier? Ist doch nicht das erste Mal, dass wir hier eine schlechte Mischung aus C und C++ sehen.

    @McMorf: Ich habe dich mal in das C-Forum verschoben, da ich annehme, dass du eigentlich C machen möchtest und die Unterscheidung der beiden Sprachen nicht so recht drauf hast. Es sieht jedenfalls wie C aus, bis auf die Ausgaben und ein paar andere Kleinigkeiten. Falls ich mich irre und du C++ machen möchtest, dann kann ich dich auch wieder nach C++ schieben, aber du darfst damit rechnen, dass du bei einer richtigen C++-Antwort nur Bahnhof verstehen wirst. Eine C-Antwort wird wahrscheinlich ähnlich verwirrend sein, da du so ziemlich alles falsch machst, was man falsch machen kann, aber es ist vielleicht wenigstens etwas, das dir hilft, C zu lernen.

    Derzeit ist dein Code aber nicht einmal compilierbar und deine Fehlerbeschreibung ist nur "funktioniert nicht", daher ist die Hilfsbereitschaft eher gering. Dein Code enthält mehrere Dutzend schwerer Fehler, auf welchen bezieht sich "funktioniert nicht"? Alle? Da würde man ja ewig an einer Antwort schreiben müssen, daher kommen nur so Antworten wie:

    Nathan schrieb:

    Wenn du C++ lernen willst, besorge dir ein vernünftiges Buch.
    Wenn du C lernen willst, vergiss cout und besorge dir ein vernünftiges Buch.

    Dem schließe ich mich mal vorerst an. Du hast so viele Fehler drin, da sitzen nicht einmal die Grundlagen. Die können wir hier nicht jedem erklären. Hier im Forum findest du Buchtipps. Finger weg von Internettutorials und Allem, was schnellen, vollständigen oder einfachen Erfolg verspricht ("in 21 Tagen", "von A bis Z", "für Dummies"). Taugt erfahrungsgemäß nichts.



  • McMorf schrieb:

    was ist jetzt so erschreckend ? das ich c und c++ vermische ?

    Nichts aus der Sicht von C. Man nimmt sich aus dem anderen Lager jene Dinge, die dort einfacher sind wie Streams und Strings.
    Diese Vorgehensweise ist gut geeignet für jeden Umstieg, aber nichts für Puristen.

    Programmiersprachen und Programmierkonzepte sind Werkzeuge zur Realisierung von
    IT-Aufgaben, keine Dogmen!


  • Mod

    berniebutt schrieb:

    McMorf schrieb:

    was ist jetzt so erschreckend ? das ich c und c++ vermische ?

    Nichts aus der Sicht von C.

    Doch! Der Code läuft dann hinterher nicht mehr durch einen C-Compiler, gleichzeitig nutzt man aber nicht die Fähigkeiten von C++. Gleichzeitig läuft man die enorme Gefahr, UB zu erzeugen, ganz besonders wenn man nicht genau weiß, was man tut. Die Standardbibliotheken sind einfach nicht für Sprachmischung ausgelegt. Und man gewöhnt sich Prinzipien an, die zu beiden Sprachen nicht passen.

    Programmiersprachen und Programmierkonzepte sind Werkzeuge zur Realisierung von
    IT-Aufgaben, keine Dogmen!

    Um die Metapher aufzugreifen: Wenn jemand mit dem Suppenlöffel einen Nagel in die Wand schlägt und mit der Laubsäge das Steak schneidet, dann kommt er zwar in beiden Fällen zum Ziel, aber man sollte ihm schon sagen, dass er da etwas falsch macht. Küchenwerkzeug und Zimmermannswerkzeug gehört eben nicht vermischt. Ist zwar prinzipiell auch ein Dogma, aber nicht alle Dogmen sind automatisch Unsinn.

    Es gibt gute, objektive Gründe, C und C++ nicht zu Mischen. Wir nennen sie bloß nicht jedes Mal, wenn hier jemand mit einer Mischform kommt. Diese Gründe kann ein Experte relativieren, da er weiß worauf er achten muss. Ein Anfänger kann dies jedoch nicht. Der Anfänger wird damit Probleme bekommen, das haben wir hier ein ums andere Mal gesehen.



  • so...
    kein c++ mehr und funktioniert...

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdarg.h>
    #include <sys/ioctl.h>
    #include <iostream>
    #include "time.h"
    
    #define BUFFERSIZE 256
    
    int delstr(char *ioPtr, char *delPtr)
    {
    	int pos[4]={};
    	char *ioAddy=ioPtr;
    	char *delAddy=delPtr;
    	char buffer[BUFFERSIZE]={};
    
    	if((int)strstr(ioPtr,delPtr)!=0)
    	{
    
    	 	//Anfang suchen..
    		pos[2]=0;
    		pos[0]=((int)strstr(ioPtr,delPtr)-(int)ioPtr);
    
    		//Ende suchen..
    		while(*delPtr++!=0)pos[1]++;
    		delPtr=delAddy;
    		pos[1]+=pos[0];
    		//Alles vor Suchstring in dern buffer schreiben..	
    		while(pos[2]<pos[0])buffer[pos[2]++]=*ioPtr++;
    		//Suchstring ignorieren..
    		pos[3]=pos[2];
    		while(pos[3]++<pos[1])ioPtr++;
    		//Alles nach Suchstring in dern buffer schreiben..
    		while(*ioPtr!=0)buffer[pos[2]++]=*ioPtr++;
    		//buffer übergeben:
    
    		ioPtr=ioAddy;
    		for(int i=0;i<BUFFERSIZE;i++)*ioPtr++=buffer[i];
    		*ioPtr=0;
    
    	}
    	_delay_ms(1000);
    	return pos[0];
    }
    
    int main(int argc, char* argv[])
    {
    	char buffer[BUFFERSIZE]={};
    	strcpy(buffer,"test string string input");
    
    	while(1)
    	{
    		delstr(buffer,(char*)"string ");
    		printf("Buffer: %s\n",buffer);
    		_delay_ms(5);
    	}
    	return 0;
    }
    

    ist das jetzt immer noch schlechter stil ?
    ich weis printf ist nicht typensicher (ist mir gerade gleich)
    wegen der "nicht kompilierbarkeit"... #include <sys/ioctl.h> <-- Linux kompiliert mit gcc/g++

    mfg Benny



  • mist, hflt heult hier jetzt keiner wegen den "unused header files" rum 🙂



  • Ach ja, du solltest dir abgewöhnen gewisse Standardheader zu inkludieren. 😉
    Und wegen der mangelnden Typsicherheit: Herzlich willkommen in C!


Anmelden zum Antworten