char wert anderem char zuweisen (char* )

Dragon_Arch

Mitglied
Ich wusste nicht genau wie Ich mein Problem im Titel ausdrücken sollte

Mein Problem : Ich habe die Variable file (<- char) und habe dieser Variablen eine zeichen länge von 64 zeichen gegeben . Der nutzer gibt dan über ein cin ein Wort ein, dieses Wort ist dan file . Nun Übergebe Ich file an afile ( char variable ) .

Hier das ganze in Code:

C:
 const unsigned int länge64 = 65;
 char file[länge64], afile; //, bfile, cfile, dfile, efile;

 cin>>file;

char* file = &afile;

cout<<afile<<endl;

Das cout am Ende gibt nur |[ aus , woran liegt das ? Was hab ich Falsch gemacht ? ( Ich kenn mich mit C++ immer noch nicht so gut aus ^^ )

Bin offen für Korrektur und andere Lösungs wege !
 
Ich wusste nicht genau wie Ich mein Problem im Titel ausdrücken sollte

Mein Problem : Ich habe die Variable file (<- char) und habe dieser Variablen eine zeichen länge von 64 zeichen gegeben . Der nutzer gibt dan über ein cin ein Wort ein, dieses Wort ist dan file . Nun Übergebe Ich file an afile ( char variable ) .

Hier das ganze in Code:

C:
 const unsigned int länge64 = 65;
 char file[länge64], afile; //, bfile, cfile, dfile, efile;

 cin>>file;

char* file = &afile;

cout<<afile<<endl;

Das cout am Ende gibt nur |[ aus , woran liegt das ? Was hab ich Falsch gemacht ? ( Ich kenn mich mit C++ immer noch nicht so gut aus ^^ )

Bin offen für Korrektur und andere Lösungs wege !

Mit der Zeile char* file = &afile; würdest du
1. Die Variable file neudefinieren - von einem Array zu einem Zeiger - und
2. würdest du nicht afile einen Wert zuweisen, sondern der Variable file.

Was noch zu bemängeln ist, wäre, dass du afile als char und nicht als char-Zeiger deklariert hast.
 
Ok , ist ja schon mal ne Antwort :) Bin auf diesen weg gekommen da mich alle Foren und so bei diesem Thema verwirren und noch ein Freund von mir , mir das so gezeigt hatte ^^ ... naja .

Wenn jemand lust hat hier was funktionierendes reinzuschreiben darf er das gerne tun , ansonsten mach ich das irgendwan .
 
C:
const unsigned int länge64 = 65;
char file[länge64], *afile; 

cin>>file;

afile = (char*)file;

cout<<afile<<endl;
 
Danke :)

Ich war ja schon nahe dran . [Wenn ich weiterer cahr Probleme habe schreibe ich sie wieder hier rein , denke ich ^^]
 
Dein Problem ist aber nur ein kleines gewesen, haben am Anfang so viele.

char ist der eigentliche Datentyp der nur einen Byte halten kann.
Ein char Zeiger zeigt im Speicher auf eine Stelle wo ein char haust ( oder mehrere chars, beendend mit einem NULL ).
Ein char Array ist konstant, immer. Du kannst nur soviele Bytes in diesem Array halten,
bis du die maximale Größe dieses Array's erschöpft hast.


Code:
char cEinChar; // Ein Byte
char *cEinCharPointer, cNochEinChar; // Der Zeiger, aber Achtung: cNochEinChar ist KEIN Zeiger, wie du am Sternchen erkennst heftet dieser nur an der Variable "cEinCharPointer".
char cEinCharArray[256]; // ein char Array, mit dem Konstanten Wert 256. Du kannst hier also 256 Bytes ablegen.
 
Ich hab das soweit alles am laufen und natührlich funktioniert es einwandfrei , nur wenn ich z.B. afile (<- ist dafür z.B. E:\\TEST\\test.exe ) als system("afile"); ausführen möchte geht dies nicht .
Wie kann man das nun zum Laufen bringen ?
 
Na die Aussagen von Teambeta müssen wir mal korrigieren. Ein char ist als erstes der Datentyp für ein Zeichen. Wenn man sich einen Satz anguckt, ist dies eine Ansammlung von vielen Zeichen, von d.h. ein Array. Doch wie macht man kenntlich, wann das Ende eines Strings erreicht ist? Unter C wird es dadurch realisiert, das man zum char-Array noch ein Zeichen hinzufügt, das Nullterminierungszeichen '\0', was dem Wert 0 entspricht. Z.B. wird die Funktion strlen einfach durch eine Schleife realisiert, die solange hochzählt, bis array[x] == 0 ist. Dies kennzeichnet einen C-String.

Doch nicht jeder char-Array muss ein String sein. Es kann auch bsw. sein das man einen Wertebereich von -10 - +10 braucht. Warum dann einen Integer oder Short nutzen? Ein char ist nämlich dadurch, das jedes Zeichen einer Zahl entspricht ein normaler Integraler Datentyp, dessen Zahlenwerte auch als Zeichen ausgewertet werden können (vgl. ASCII-Tabelle).

NULL nutzt man dafür, um einen Zeiger auf Nichts zeigen zu lassen, bzw. auf die Adresse 0x0000000.
 
Na die Aussagen von Teambeta müssen wir mal korrigieren. Ein char ist als erstes der Datentyp für ein Zeichen. Wenn man sich einen Satz anguckt, ist dies eine Ansammlung von vielen Zeichen, von d.h. ein Array. Doch wie macht man kenntlich, wann das Ende eines Strings erreicht ist? Unter C wird es dadurch realisiert, das man zum char-Array noch ein Zeichen hinzufügt, das Nullterminierungszeichen '\0', was dem Wert 0 entspricht. Z.B. wird die Funktion strlen einfach durch eine Schleife realisiert, die solange hochzählt, bis array[x] == 0 ist. Dies kennzeichnet einen C-String.

Doch nicht jeder char-Array muss ein String sein. Es kann auch bsw. sein das man einen Wertebereich von -10 - +10 braucht. Warum dann einen Integer oder Short nutzen? Ein char ist nämlich dadurch, das jedes Zeichen einer Zahl entspricht ein normaler Integraler Datentyp, dessen Zahlenwerte auch als Zeichen ausgewertet werden können (vgl. ASCII-Tabelle).

NULL nutzt man dafür, um einen Zeiger auf Nichts zeigen zu lassen, bzw. auf die Adresse 0x0000000.

Richtig, NULL ist ebenfalls dieses Terminierungszeichen.
 
Nein, NULL ist gerade zufällig so definiert (bei dir), muss es aber nicht. Es ist auch schonmal als
C++:
(void*)0
definiert oder sonst was.

Und dennoch stimmt deine Aussage nicht, das ein char-Array zwingend Nullterminiert sein muss!
 
Zurück