problem beim schreiben von pointern die an funktion übergeben wurden



  • 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!



  • eins noch ? was ist schlimm daran c mit c++ zu mischen ?!?! also was macht da den schlechten stil aus ?

    wenn ich jetzt reinen c code in nen objekt objekt mit zugriffsbeschränkung stecken will, ist das schon schlechter stil ?

    wird mir häufiger mal an den kopf geworfen, das erklährt mir aber auch keines der bei mir vorhandenen c und c++ bücher...

    Mfg Benny



  • mcmorf! schrieb:

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

    Ach wirklich? => Naivgläubiger

    mcmorf! schrieb:

    ist das jetzt immer noch schlechter stil ?

    Ja, immer noch Schrott. Viel zu viel Dilettantencode für diese einfache Aufgabe.

    mcmorf! schrieb:

    ich weis printf ist nicht typensicher (ist mir gerade gleich)

    Willst du jetzt beeindrucken, weil du das irgendwo aufgeschnappt hast und nachplappern kannst?

    mcmorf! schrieb:

    wegen der "nicht kompilierbarkeit"... #include <sys/ioctl.h> <-- Linux kompiliert mit gcc/g++

    Compiliert, weil du alle Compilerwarnungen weggecastet hast. => Dilettant

    mcmorf! schrieb:

    was ist schlimm daran c mit c++ zu mischen

    Weil C und C++ zwei unterschiedliche Programmiersprachen sind mit völlig unterschiedlichen Intentionen. Manche begreifen es nie.



  • mcmorf! schrieb:

    ist das jetzt immer noch schlechter stil ?

    Vieeeel zu viel Code, viel zu viele Schleifen.



  • Wutz schrieb:

    mcmorf! schrieb:

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

    Ach wirklich? => Naivgläubiger

    mcmorf! schrieb:

    ist das jetzt immer noch schlechter stil ?

    Ja, immer noch Schrott. Viel zu viel Dilettantencode für diese einfache Aufgabe.

    mcmorf! schrieb:

    ich weis printf ist nicht typensicher (ist mir gerade gleich)

    Willst du jetzt beeindrucken, weil du das irgendwo aufgeschnappt hast und nachplappern kannst?

    mcmorf! schrieb:

    wegen der "nicht kompilierbarkeit"... #include <sys/ioctl.h> <-- Linux kompiliert mit gcc/g++

    Compiliert, weil du alle Compilerwarnungen weggecastet hast. => Dilettant

    mcmorf! schrieb:

    was ist schlimm daran c mit c++ zu mischen

    Weil C und C++ zwei unterschiedliche Programmiersprachen sind mit völlig unterschiedlichen Intentionen. Manche begreifen es nie.

    das ist auch wieder sehr hilfreich...
    was spricht jetz gegen casten ?
    wieso gibst du super progger mir nicht einfach nen paar hinweise wie ich es besser mache ?

    typensicherheit ist mir sehr wohl bekannt und ich habe es nicht einfach nachgeplappert... bei printf liegt das u.a starg... es ist halt anfällig für bufferoverflows oder format string attacken...

    vlt komme ich dir ja vor als währe ich dumm, ganz so schlimm ist es glaube ich nicht... zugegeben sind viele schleifen hätte man auch einfacher lösen können...

    wozu postet jemand wie du eigendlich auf solche beiträge ?
    scheinbar willst du nicht helfen. sieht mir so aus als müsstest du dich profilieren...

    jetzt mal im ernst ich binn auch dankbar für kritik !
    aber mich als diletant zu bezeichnen finde ich echt n bissl übertrieben...
    langsam kommt mir das hier vor wie in nem VisualStudio forum... viel zu viel aufgeblasenes geschwätz...

    gottseidank gibt es hier auch leute die wirklich helfen wollen 🙂



  • achso und zum casten:

    delstr(buffer,(char*)"string "); das ist die einzige stelle wo ich caste...
    hätte ich ja auch vorher in nen array schreiben können...

    irgendwie weiß ichs auch nicht... man man man...



  • mcmorf! schrieb:

    delstr(buffer,(char*)"string "); das ist die einzige stelle wo ich caste...

    Also ich sehe da noch drei (int).

    Warum castest du da eigentlich?



  • mist...
    hier caste ich ja auch:
    pos[0]=((int)strstr(ioPtr,delPtr)-(int)ioPtr);

    tüdeldü 🙂



  • da habe ich mir noch keine gedanken zu gemacht....
    bei den 3 int weil ich nicht anders wusste wie 🙂
    beim suchstring aus faulheit 🙂

    mir war aber auch nicht bekannt das casten was schlechtes ist...
    was spricht denn dagegen ?!?

    mfg benny



  • mcmorf! schrieb:

    mir war aber auch nicht bekannt das casten was schlechtes ist...
    was spricht denn dagegen ?!?

    Jeder Cast verhindert die Typprüfung durch den Compiler an dieser Stelle. Ein Cast bedeutet: Hier weiß der Programierer besser als der Compiler, was eigentlich passiert.

    Du musst bei jedem einzelnen Cast genau begründen können, warum er an dieser Stelle notwendig und richtig ist. Ansonsten ist das Murks.



  • hmm... ok... das war mir so nicht bewusst, werde in zukunft casts vermeiden...
    SOLCHE AUSSAGEN ! sind hilfreich !
    Danke dafür !

    Mfg Benny


Anmelden zum Antworten