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 angehtDanke 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.