problem beim schreiben von pointern die an funktion übergeben wurden



  • 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



  • das ist ja auch mal was... unbeliebte aussagen werden hier zensiert ?!?

    naja wie dem auch sei...
    ich weiß man kann die pointer auch weck lassen und direkt mit den adressen arbeiten, dann wirds meiner meinung nach aber unübersichtlich...

    so...
    was ist denn jetzt hier drann noch schlechter stil ?!?
    ich will ja an meinem stil arbeiten, soll ja auch mal vernünftig lesbar sein...
    irgendetwas findet ihr doch bestimmt noch...

    achso bitte nur konstruktieves, auf trolle die mir troll sein vorwerfen hab ich nähmlich keine lust und ich kann mir auch nicht vorstellen das das im sinne dieser community ist *grmbl*

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define BUFFERSIZE 256
    
    int delstr(char *buffer, char *substr)
    {
    	char *sptr;
    	char *eptr;
    	char *cptr;
    	char *bptr;
    
    	while(strstr(buffer,substr)!=0)
    	{
    		sptr=strstr(buffer,substr);
    		eptr=(strstr(buffer,substr)+strlen(substr));
    		cptr=&buffer[strlen(substr)];
    		bptr=eptr;
    
    		while(*eptr++!=0)*sptr++=*bptr++;
    		bptr=&buffer[(strlen(buffer)-strlen(substr))];
    		while(*bptr!=0)*bptr++=0;
    	}
    	return 0;
    }
    
    int main(int argc, char* argv[])
    {
    	char buffer[BUFFERSIZE]={};
    	strcpy(buffer,"test string test string ausgabe");
    
    	while(1)
    	{
    		delstr(buffer,(char*)"string ");
    		printf("Buffer: %s\n",buffer);
    		//_delay_ms(5);
    	}
    	return 0;
    }
    

    etwas noch... in zukunft werde ich c und c++ nicht mehr vermischen, hab verstanden das das keiner mag !
    das UB was ich erzeugt habe lag nur beim const char * t1 ?!? oder erzeuge ich soetwas auch durch casten ?!? also wenn cih weis warum ich caste brauch der compiler es doch nicht zu wissen oder ?
    muss ich eigendlich die pointer initialisieren ?!?
    werden ja nicht genutzt es sei denn ein substring ist im buffer vorhanden (da bekommen sie ja eh ihre addressen)
    fragen über fragen...
    erst mal danke für die herzliche mithilfe, an die persohnen die konstruktiev geholfen haben...

    mfg benny



  • mist, ich caste ja immer noch , tüdeldü 🙂 den ersetze ich auch schnell noch....



  • vlt ersetze ich printf noch durch sprintf, aber bitte jetzt nicht wegen solchen sachen meckern, über bufferoverflows ham wir ja schon geredet 😛


  • Mod

    mcmorf! schrieb:

    das ist ja auch mal was... unbeliebte aussagen werden hier zensiert ?!?

    Ja. Nicht nur das: Du und dein ganzer Thread schlingern gerade zielsicher auf eine vollständige Sperrung zu. Lass dir das eine Warnung sein. Benimm dich wie ein normaler Mensch!



  • SeppJ schrieb:

    mcmorf! schrieb:

    das ist ja auch mal was... unbeliebte aussagen werden hier zensiert ?!?

    Ja. Nicht nur das: Du und dein ganzer Thread schlingern gerade zielsicher auf eine vollständige Sperrung zu. Lass dir das eine Warnung sein. Benimm dich wie ein normaler Mensch!

    ??? was habe ich denn jetzt schon wieder gemacht ?


Anmelden zum Antworten