Probleme mit Funktionen
-
Hallo net,
es funktioniert, danke, kannst du mir erklären, wo mein (Denk)Fehler war, es funktioniert zwar, möchte aber gern wissen, was ich falsch gemacht habe, damit ich es beim nä. mal nicht wieder falsch mache.
das static bewirkt, das die variable beim verlassen der funktion nicht überschrieben wird,oder?
und die funktion gibt einen Zeiger zurück,warum?
Danke Dir
Gruss ALex
PS:
Ich habe mal weiter gecoded, wenn ich die Funktion mehrmals hintereinander aUFRUFE kommt dann quark, also irgendwelcher kryptischer mist. Kann das mit dem static zu tun haben, muss ich das neu intialisieren????
-
facebraker schrieb:
das static bewirkt, das die variable beim verlassen der funktion nicht überschrieben wird,oder?
jo, die variable existiert weiter und behält ihren inhalt, auch wenn die funktion verlassen wird.
facebraker schrieb:
und die funktion gibt einen Zeiger zurück,warum?
das ist die adresse auf das erste element des char-arrays. die brauchste, um auf das char-array zuzugreifen...
facebraker schrieb:
Ich habe mal weiter gecoded, wenn ich die Funktion mehrmals hintereinander aUFRUFE kommt dann quark, also irgendwelcher kryptischer mist. Kann das mit dem static zu tun haben, muss ich das neu intialisieren????
ja, sehr wahrscheinlich. das mit dem static-array ist für die meisten fälle ziemlich blöd, weil du das ergebnis nur einmal hast d.h. du musst die daten da rauskopieren und das array neu initialisieren, wenn du die fkt. mehrfach benutzen willst. besser mach es so:
entweder: gib der funktion beim aufruf einen pointer auf ein array mit, das sie bearbeiten soll.
oder: leg' in der funktion ein neues array an (mit malloc etc.) und gib dessen adresse zurück (dann musst du die aber mit 'free' wieder freigeben, wenn sie nicht mehr gebraucht wird).
-
Wieso denn so umständlich?
Wie wäre es denn mit:mein_string[strlen(mein_string) - 1] = '\0'
Damit ersetzt du das Linefeed mit dem Stringende Zeichen und fertig
-
Ich würde schon checken, ob es überhaupt ein '\n' gibt
-
jbo75 schrieb:
Wieso denn so umständlich?
Wie wäre es denn mit:mein_string[strlen(mein_string) - 1] = '\0'
Damit ersetzt du das Linefeed mit dem Stringende Zeichen und fertig
Wer sagt denn, daß das LineFeed das letzte Zeichen des Strings ist?
@face: Übrigens solltest du stat mit 10 lieber mit '\n' vergleichen (afair ist '\r'=10 und '\n'=13).
-
CStoll schrieb:
(afair ist '\r'=10 und '\n'=13).
Umgekehrt.
-
Hi Leute, danke erstmal für die Antworten.
Ich habe noch einige Fragen.
@net: wie kann ich die Variable neu initialisieren? Theoretisch könnte ich ja sagen Vari[0]='\0' wenn ich JBO75 richtig verstanden habe?So hatte ich es glaube vom Programmierungsuntericht noch in Erinnerung
@JBO75: die Idee mit
mein_string[strlen(mein_string) - 1] = '\0'
ist gut, werd ich gleich mal checken.
@TactX/CStoll, ja ich weiss, es ist gefährlich auf 10 zu prüfen, aber ich lese die Zeilen aus meiner Parameterdatei, also bin ich in der Annahme es ist immer 10 oder '\n' ... ich weiss ein Spiel mit dem Feuer.
@net:"entweder: gib der funktion beim aufruf einen pointer auf ein array mit, das sie bearbeiten soll.
oder: leg' in der funktion ein neues array an (mit malloc etc.) und gib dessen adresse zurück (dann musst du die aber mit 'free' wieder freigeben, wenn sie nicht mehr gebraucht wird)."Könntest du mir ein Beispiel posten, das ich ein theoretisches Beispiel habe????
Wäre cool!!!
So, jetzt werde ich mal eure Vorschläge testen ... Danke nochmal für die Hilfe!
Gruss Alex
-
Bashar schrieb:
CStoll schrieb:
(afair ist '\r'=10 und '\n'=13).
Umgekehrt.
Und genau wegen dieser Verwirrungen ist es immer besser, die Escape-Literale zu verwenden
@TactX/CStoll, ja ich weiss, es ist gefährlich auf 10 zu prüfen, aber ich lese die Zeilen aus meiner Parameterdatei, also bin ich in der Annahme es ist immer 10 oder '\n' ... ich weiss ein Spiel mit dem Feuer.
Randfrage: Mit welcher Methode liest du überhaupt ein?
Könntest du mir ein Beispiel posten, das ich ein theoretisches Beispiel habe????
//a: Puffer vom Nutzer bereitstellen lassen: char* func(char* source,char* target) { ... return target; } //Aufruf char t[255]; func(input,t); //b: malloc/free char* func(char* source) { char* target = malloc(255);//hier könntest du auch eine variable Größe angeben ... return target; } //Aufruf char* t=func(input); ... free(t);
-
[quote="CStoll"]
Bashar schrieb:
CStoll schrieb:
(afair ist '\r'=10 und '\n'=13).
Umgekehrt.
Und genau wegen dieser Verwirrungen ist es immer besser, die Escape-Literale zu verwenden
Ja, ich habe meist den Hexeditor an und schaue welche das sind.Sicher ist sicher.@TactX/CStoll, ja ich weiss, es ist gefährlich auf 10 zu prüfen, aber ich lese die Zeilen aus meiner Parameterdatei, also bin ich in der Annahme es ist immer 10 oder '\n' ... ich weiss ein Spiel mit dem Feuer.
Randfrage: Mit welcher Methode liest du überhaupt ein?
ich öffne eine Datei und lese Zeilenweise ein:
while(fgets(pPuffer,sizeof(pPuffer),fDatei)!=0 )
ich bekomme ja dann pPuffer zurück und die möchte ich dann mit der Funktion um das '\n' kürzen.
Danke für den Code, werd ich gleich mal Checken.
Danke Dir
Gruss Alex
-
Wozu brauchst eigentlich noch den Originalstring?
Die einfachste und imho beste Lösung zum entfernen eines '\n' nach fgets() ist:
if( (nl = strchr(line, '\n')) ){ *nl = '\0'; }
-
Hallo,
ich konnte das Problem mit
meinstring[strlen(meinstring)-1='\0'
lösen, hatte noch 1 Stolperfalle drin, es war ein CR und ein LF so das ich einfach sagte:
meinstring[strlen(meinstring)-2='\0'
Somit brauchte ich die Funktion nichtmehr, was mich natürlich immernoch wurmt, ich habe zwar eine Lösung, aber ich wollte es ja mit der Funktion lösen und ärgere mich, dass es nicht funktionierte
Ich habe die dumme Vermutung das CR hat mir noch dazwischengefunkt, werd ich nochmal checken.Also, Danke für Eure hilfe, bin zum Ziel gelangt
... das ist die Hauptsache.
Gruss Alex
-
Öffne die Datei am besten im Textmodus, dann sollte das '\r' automatisch verschluckt werden.