kleines Problem mit Pointern :mad:



  • **_cFunctionsForTest; //global
    FILE *_coverageFile;  //global
    
    int myfunc
    {
    
    	char *cTmpBuffer;
    	int i =0,lSize=1000;
    	if ((cTmpBuffer = (char*) malloc (sizeof(char)*lSize))==NULL)
    	{
      		sprintf(_cErrorString, "Not enough memory\n" "needed Size =%ld" ,lSize);
    		showError(_cErrorString,APL_ERROR);
    	}
    	if ((_cClassesForTest = (char**) malloc (sizeof(char*)*lSize))==NULL)
    	{
    		sprintf(_cErrorString,	"Not enough memory\n" "needed Size =%ld" ,lSize);
    		showError(_cErrorString,APL_ERROR);
    	}
    	while(i!=-1)
    	{
    		fgets(cTmpBuffer,_MAX_PATH-1,_coverageFile);
     		cTmpBuffer[strlen(cTmpBuffer)-1]='\0';		
    		if(cTmpBuffer == "|FUNCTIONS|")
    		{
    			i=-1;
    		}else
    		{
    			_cClassesForTest[i] = cTmpBuffer;
    			i++;
    		}
    	}
    	i=0;
    }
    

    Also wie man es leider erwaten mußte steht am Ende des Durchlaufs der While Schleife für jedes i in _cClassesForTest[i] das selbe, wenn ich in c bleiben will wie stell ich das ab, sobald ich was an den Pointern ändere bekomme ich im cast fehler

    mkgandalf



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum ANSI C verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • mkgandalf schrieb:

    if(cTmpBuffer == "|FUNCTIONS|")
    

    C-Strings vergleicht man mit strcmp, nicht mit ==.

    mkgandalf schrieb:

    _cClassesForTest[i] = cTmpBuffer;
    

    Und am Ende zeigen alle auf cTmpBuffer. Vielleicht solltest du für jeden einzelnen String Speicher holen und strcpy verwenden.



  • Hallo ja danke das mit dem Stringvergelich hab ich gefixt,

    das Problem ist , das ich nicht weiß wieviele Strings das werden,

    aber ich hab die Lösung gerade gefunden

    _cClassesForTest[i] = strdup(cTmpBuffer);
    

    man sollote halt die wichtigsten c Funktionen kennen 😞
    bin leider von QT verwöhnt was String behandlung angeht

    Danke nochmal

    mkgandalf 😃



  • mkgandalf schrieb:

    aber ich hab die Lösung gerade gefunden

    _cClassesForTest[i] = strdup(cTmpBuffer);
    

    Nur ist strdup kein Standard, also aufpassen. Zudem ist das eine recht unschöne Funktion, da du den von strdup angeforderten Speicher auch wieder freigeben musst.



  • groovemaster schrieb:

    mkgandalf schrieb:

    aber ich hab die Lösung gerade gefunden

    _cClassesForTest[i] = strdup(cTmpBuffer);
    

    Nur ist strdup kein Standard, also aufpassen. Zudem ist das eine recht unschöne Funktion, da du den von strdup angeforderten Speicher auch wieder freigeben musst.

    ja, strdup ist SVID 3 uhd BSD 4.3 aber nicht ANSI.
    Unschön würde ich nicht sagen, weil sowas hilft, man muss nur aufpassen und das muss der Programmier immer tun.


Anmelden zum Antworten