• 25.04.2024, 01:10
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

char*, new char, etc.

Dienstag, 21. Dezember 2004, 20:25

guten n'abend,

ich ärgere mich gerade maßlos in c/c++ mit chars rum:

ich arbeite gerade ein bißchen mit tcp streams und habe folgendes (wahrscheinlich super simples problem):

ich möchte eine Eingabe (funktioniert genauso wie cin>> heißt bei mir nur tcp >> )
als char speichern und in eine doppeltverkettete liste hängen.
die funktion func_Insert bekommt einen Pointer auf die "new" Eingabe übergeben. die eingabe hat eine variable länge.

Quellcode

1
2
3
4
5
6
7
8
9
10
char char_I[];                <-- ???
char *char_Pointer;
bool bool_InfRun = false;
while (bool_InfRun == false)
{
  tcp >> char_I;
  char_Pointer = new char[];            <-- ??? 
  *char_Pointer = char_I;
  obj_Stack.func_Insert(char_Pointer);
}


der compiler sagt in etwa folgendes:

'i' unbekannte Größe
char[] kann nicht in char konvertiert werden.

ich weiß, dass ich eigentlich bei der initialisierung die größe des chars vorgeben muss.

hat jemand ne idee wie man das lösen kann?
"Some men see things as they are and say why. I dream things that never were and say, why not?" John F. Kennedy

Re: char*, new char, etc.

Dienstag, 21. Dezember 2004, 20:29

Hi, du musst beim Erstellen die Länge wissen.

entweder so:
char c[200];  //Platz für 200 Zeichen

oder

int n=200;
char *d=new char[n]; //auch Platz für 200 Zeichen, aber halt nicht von vorne herein fest definiert.

char c[n];; //geht nicht !!

Cu Hurra

Re: char*, new char, etc.

Dienstag, 21. Dezember 2004, 22:12

Vektoren sind besser:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <vector>

int main()
{
 std::vector<char> itsString;
 itsString.push_back('A');
 itsString.push_back('C');
 // itsString[0] wäre A
 // itsString[1] wäre C

 itsString.clear();
 // itsString wäre leer bzw. itsString.size(); wäre 0.
 return 0;
}


MfG
"I've always said, the Web is the sum of all human knowledge plus porn.", Ron Gilbert
UltraStar Manager 1.7.2 | Infos zu meinem PC | .o0 DeathSpank 0o.

Re: char*, new char, etc.

Dienstag, 21. Dezember 2004, 22:13

#define n 200

double char[n]; // geht aber

Re: char*, new char, etc.

Dienstag, 21. Dezember 2004, 22:14

Zitat von »xmas-Draco«

#define n 200

double char[n]; // geht aber


Jops. Weil n hier eine Konstante ist. Aber: "char itsString[n];" oda?

MfG
"I've always said, the Web is the sum of all human knowledge plus porn.", Ron Gilbert
UltraStar Manager 1.7.2 | Infos zu meinem PC | .o0 DeathSpank 0o.

Re: char*, new char, etc.

Dienstag, 21. Dezember 2004, 22:14

Ja, aber du kannst n nicht mehr zur Laufzeit ändern //zb durch  Benutzereingaben.

E:Hmpf ::)

Re: char*, new char, etc.

Dienstag, 21. Dezember 2004, 22:15

Wenn man Vektoren nutzt, kann man zusätzlich auch jederzeit die Grenzen abfragen :D

MfG
"I've always said, the Web is the sum of all human knowledge plus porn.", Ron Gilbert
UltraStar Manager 1.7.2 | Infos zu meinem PC | .o0 DeathSpank 0o.

Re: char*, new char, etc.

Donnerstag, 23. Dezember 2004, 00:10

Danke für die Antworten.

Leider hat sich bestätigt, was ich die ganze Zeit nicht wahrhaben wollte.

Ich habe jetzt die "dreckige" Variante mit "string"s gewählt.
Das wollte ich zwar eigentlich vermeiden, aber vom Aufwand her ist es am einfachsten.

Hier kennt sich nicht zufällig jemand mit der Common C++ Bibliothek aus?

Dann könnte ich innerhalb der nächsten Tage nämlich ein paar Fragen haben... ;)

"Some men see things as they are and say why. I dream things that never were and say, why not?" John F. Kennedy

Re: char*, new char, etc.

Donnerstag, 23. Dezember 2004, 08:45

"dreckige Strings" ?! Du meinst doch nicht die CString-Klasse? Die is ja beim reinen C++ nich dabei. Bei der MFC gibts die aba glaub ich.

Schreib dir einfach eine eigene CString-Klasse mit den oben erwähnten Methoden. Dürfte einfach sein und den "Schmutz" kannste ja beim coden vermeiden :D

MfG
"I've always said, the Web is the sum of all human knowledge plus porn.", Ron Gilbert
UltraStar Manager 1.7.2 | Infos zu meinem PC | .o0 DeathSpank 0o.