char * fangen

partitionist

Erfahrenes Mitglied
Hab 2 Dateien eine .cpp und h. Die cpp Datei sendet der Header Datei ein Char * mit einem Inhalt

Header Datei
Code:
char *Path;

char *LOG_Path(char *str)
{
	Path = str;
	return str;
}

Nach der Funktion hat Path einen anderen Inhalt warum
 
Naja...

deswegen: Path = str;

Path ist ein Pointer, und dem weist du nun einen anderen Wert zu. Daher ist der Wert anders.

Wenn du strings kopieren willst, hilft dir diese Funktion: strcpy(dest,src)
Allerdings solltest du vorher schein ein wenig Platz dafür bereitstellen.

Hier mal Code dazu:
Code:
char *Path=NULL;

char *LOG_Path(char *str)
{
  // Alten Wert von Path löschen
  if(Path) delete[] Path;
  Path = NULL;
  
  //Platz für str machen
  Path = new char[strlen(str)+1];
  
  //string kopieren
  strcpy(str, Path);

  return str;
}

Du musst beim beenden deines Programmes allerdings nocheinmal diese Zwei Codezeilen:
Code:
if(Path) delete[] Path;
Path = NULL;

nochmal ausführen. Sonst entsteht ein Memory Leak.

Oder du nimmst gleich die Klasse std::string und sparst dir diesen Verwaltungskram:

Code:
#include <string>
using std::string;

string Path;

char *LOG_Path(char *str)
{
  Path = str;
  return str;
}
 
Zuletzt bearbeitet:
Ich will ja die Funktion nicht mehr aufrufen, sie dient nur als Zwischenspeicher für den Wert str, dann soll nur auf Path verarbeitet werden. Wenn ich Path hinter der Funktion Ausgebe steht da: Null
 
Also Datei A sendet den wert str an Datei B, dabei wird ja die funktion in der Datei A aufgerufen logisch oder. Jetzt soll der wert von str in Datei B bleiben und weiter verwendet werden, dabei darf ich ja nicht die funktion aufrufen da ich ja wieder ein wert eingeben muss. Eigentlich ist funktion nutzlos da ich ein wert zuweise und denn wieder zurückbekomme.
 
Hi.

Ich denke du hast das mit den Header und CPP Dateien noch nicht so ganz verstanden. In eine Header Datei gehört z.B. eigentlich keine Funktionsdefinition (und auch keine Variablendefinitionen). Die Header Dateien werden vom C Präprozessor als erstes überall da wo ein #include steht textuell eingesetzt, d.h. wenn der Compiler nachher den Code übersetzt sieht der nur eine einzige Datei die er dann sequentiell abarbeitet.

Und was genau meinst du mit senden? Du rufst die Funktion auf oder wie?

Am besten wäre wenn du die 2 Dateien mal komplett hier postest - wenn sie nicht gerade mehrere 100 Zeilen groß sind...
 
Schließe mich dem Vorredner an. Header sind (außer bei Templateklassen oder anderen kurzen inline Klassen) kein Ort an dem Code steht, keine using-Direktive, keine Variablen deklariert. Wenn es wirklich sein muss dass es eine globale Variable gibt darf die nur in EINER Übersetzungseinheit definiert sein. Im Header kannst du die dann bekannt machen, so nach dem Motto: "Lieber Compiler, tu mal so als ob es diese Variable gibt. Ich hab sie in einer anderen Übersetzungseinheit definiert und werde es nacher dazulinken."

Gruß
 
Zurück