Strings zusammenfügen.
-
Hallo,
das mit Malloc habe ich schon verstanden bzw. nachgelesen. Da ich normalerweise in Java und VB programmiere war mir das etwas fremd.
Könntet Ihr mir noch einen Gefallen tun?
Ich habe ein Tool programmiert. Könntet Ihr es kurz durchschauen ob ich gegen irgendwelche C Konventionen verstoßen habe? Also keine Fehlersuche sondern nur schauen ob ich mich mit diesem Programm "sehen lassen könnte".Der Link: http://www.redrival.com/peterfarge/BinCom.zip
Antworten entweder an peterfarge@hotmail.com
oder kurze Bemerkungen hier im Forum.Viele Grüße
Peter
-
habs nur ueberflogen...
(!(feof((*log1).ptr_file) || feof((*log2).ptr_file)))
da wuerde ich lieber
!feof((*log1).ptr_file) && !feof((*log2).ptr_file)
nehmenausserdem schreibt man statt
(*p).foo
lieber
p->foostatt
strcpy(line_log1, "\0");
wuerde ich lieber
line_log1[0]=0;
schreibenwas nach
/* Zweite Datei beinhaltet noch Zeilen. */
steht sollte in eine funktion. da der code fuer die erste datei identisch mit diesem istden return wert von malloc castet man nicht
strcat ist lahm, da wuerde ich lieber mit memcpy arbeiten
IMHO ist es nicht schoen wenn eine funktion speicher reserviert und diesen zurueckgibt. da vergisst man das free nur allzuleicht
zeiger auf werte die du nicht aendern willst sollten const sein
\n durch \0 zu ersetzen sollte eine funktion sein
-
Ja, ist ok, denke ich.
Aber wieso programmierst Du in C ?
Wenn Du vorher in Java programmiert hast, dann programmiere doch in C++ (z.B. new ist da gleich...).
Das ist kompfortabler als C, finde ich.
Ausserdem ist das sowieso kein reines C, was Du geschrieben hast (z.B. kommen die str-Funktionen glaube ich von C++).
-
fit schrieb:
Ausserdem ist das sowieso kein reines C, was Du geschrieben hast (z.B. kommen die str-Funktionen glaube ich von C++).
ich habe nix C++ spezifisches gesehen, erklaer mal genauer was du meinst. uU hab ich ja was uebersehen...
die str* funktionen sind aber schon C
-
@Shade: Zweiter Beitrag von oben:
fit schrieb:
... char *retVal = new char[strlen(strLog1) + strlen(strLog2) +strlen(seperator) +1]; ...
-
@Shade Of Mine: Vielen Dank für Deine Anmerkungen.
Das mit free ist aber etwas komplizierter: So wie ich es gelesen habe muß man alles was mit malloc angefordert wurde mit free wieder freigeben. Da ich den String auch außerhalb der Funktion benötige wäre demnach die einzige Möglichkeit den String schon vorher mit malloc anzufordern und ihn dann wenn der Platz nicht reicht mit realloc zu erweitern?
Das mit den zusätzlichen Funktionen und line_log1[0]=0; leuchtet ein und ist gegessen;-)Das ganze Programm gehört zu einer Bewerbung die ich bis Freitag (also vorhin) abgeben mußte/durfte. Mal sehen ob ich bei der Firma eine Zukunft habe... *g*
@fit: Bei vielen kleineren Untenehmen ist man als Generalist gern gesehen. VB, Java, Html und SQL Kenntnisse waren auch gefordert.
Sehr oft muß man den Source aus einer anderen Sprache übertragen. -> Reengineering. Bzw. flexibel sein und als Anfänger an anderen Projekten mitarbeiten. Wenn man dann noch einige Grundkenntnisse in der Sprache hat ist man immer im Vorteil.Peter
-
RTC schrieb:
@Shade: Zweiter Beitrag von oben:
wenn fit bloedsinn schreibt, dann soll er doch.
aber tatsache ist, dass peterfarge keinen bloedsinn geschrieben hat.peterfarge schrieb:
Das mit free ist aber etwas komplizierter: So wie ich es gelesen habe muß man alles was mit malloc angefordert wurde mit free wieder freigeben. Da ich den String auch außerhalb der Funktion benötige wäre demnach die einzige Möglichkeit den String schon vorher mit malloc anzufordern und ihn dann wenn der Platz nicht reicht mit realloc zu erweitern?
es gibt 2 gute moeglichkeiten wie man das loesen kann:
a)
der aufrufer muss dem speicher bereitstellen und die funktion kuemmert sich nicht darum.b)
die funktion allokiert den speicher und gibt semantisch gesehen ein objekt zurueck (welches natuerlich ein einfacher char* auf den speicher sein kann)der caller soll nun nicht free() aufrufen (was aber theoretisch auch klappen wuerde) sondern lieber
FreeCSVString()
verwenden.der sinn ist der:
char* p=foo();
...
free(p);hier faellt es nicht sonderlich auf wenn das free() fehlt, denn niemand sucht ob jedes foo() ein passendes free() hat (das ist unnatuerlich, man sucht nur nach mallc/realloc/callc und free())
wenn man aber
char* p=getResource();
...
freeResource(p);hat, dann faellt das eher auf.
-
Hallo Shade of Mine,
der Ansatz mit dem Selber Allokieren scheint besser in das C Konzept zu passen. ZB. bei den String Funktionen übergibt man ja auch einen Puffer und bekommt ihn verändert zurück.
Aber da das Prog schon abgegeben ist... isses jetzt eh egal;-)Viele Grüße
Peter
-
Ich bin voll der C/C++-Ne*be und habe keinen Plan, für was die Funktion maloc gut ist. Könnte mir das bitte jemand sagen?
Danke
Lutz
-
Mit der Funktion malloc allozierst du Speicher.
EDIT:
http://faql.de/desdfaql2.html schrieb:
»allozieren« hat die Bedeutung »[Mittel] zuweisen, bereitstellen«.
»allokieren« hingegen heißt »jemanden anreden«