# [C(/C++] AnsiString <-> Char - Wichtig!



## Sinac (6. Januar 2003)

Hallo!
Ich dreh noch durch!
kann mir jemand verraten, wie ich nen String in Char
umwandele oder zumindest umgekehrt?
Also jetzt nicht mir String.c_str() in nen Zeiger,
sondern echt in ein Char Array!

Kurz zum Problem:
Ich will mit fstream Zeilen aus ner Datei auslesen, also:

char Input[100];
Datei.getline(Input, 100);

so is das aber mist, weil ich 1.die länge der Zeile auf 100 begrenze,
und mir das Programm abkackt wenn sie länger ist und ich kein
99999999... Byte langes Array reservieren will.
Also hab ich mir gedacht:

String Input
Datei.getline(Input, Input.Length);

Aber die Parameter für getline sind getline(const char, void), also
gehts ja nicht ganz so einfach!

Alles verstanden? Hoffe jemand kann helfen, THX im vorraus!


----------



## goela (7. Januar 2003)

Ich würde Dir gerne helfen, doch irgendwie habe ich ein Problem mit Deinen Befehlen. Welche Bibliothek verwendest Du? STL, C-Builder oder was!

Hab mal in der Hilfe bei Microsoft nachgeschlagen und da finde ich nur dies:

```
basic_istream& getline(E *s, streamsize n);
const E *c_str() const;
```
Ist dies was Du verwendest? Wenn ja, dann kannst Du mit getline gleich den Inputstream sowie String übergeben. Es gibt nämlich solch eine Methode:

```
basic_istream<_E, _TYPE>& getline( basic_istream<_E, _TYPE>& Istream, basic_string<_E, _TYPE, _A>& Xstring, const _E _D=_TYPE::newline());
```


----------



## Sinac (7. Januar 2003)

Hallo!
die Bibliethoek ist <fstream.h> und ich hab C++Builder.
Ich poste mal n bischen mehr von Code:

```
void read() {
  String Datei = C:\test.txt;
  fstream Input;
  char line[500];

  Input.open(Datei.c_str(), ios_base::in);

  if(!Input)
          ShowMessage("Datei konnte nicht geöffnet  werden!");
  else {
          while(!Input.eof())
                {
                Input.getline(line, 500);
                Form1->Memo->Lines->Append(line);
                }
           }
}
```
Denk mal die Methode die du gepostet hast könnte helfen, 
ich steig da nur leider nicht so ganz durch =(

Aber gibts denn grundsätzlich keine "normale" Möglichkeit char in
String und umgekehrt zu konvertieren? also wie jetzt z.B.
mit IntToStr() sowas in die richtung?

Noch mal ne andere Frage:
Kann man dieses Popoup Menü aus Textfelder (mit Kopieren, Ausscheniden, etc.) iregendwie in eine MainMenu einbinden
oder sonst wie drauf zu greifen? Hab schon mal in der Hilfe
nachgesehen, da war aber nichts zu finden (C++Builder).


----------



## goela (7. Januar 2003)

Meine Angaben bezogen sich auf Visual C++. Deshalb bist Du wahrscheinlich nicht mitgekommen.

Hier ist eine Lösung, wie es unter C++ Builder gehen sollte. Verwende einfach getline() von der STL. Damit dürfte Dein Problem behoben sein.


```
#include <string>
#include <fstream>
using namespace std;

ifstream infile;
string strLine;

infile.open("myfile.txt");
getline(infile,strLine);

infile.close()
```


----------



## Sinac (8. Januar 2003)

Erstmal THX! klappt aber leider nicht!

Hier mal der Code

```
String Datei = "File.txt";
ifstream Input;
String strLine;

Input.open(Datei.c_str());
if(!Input)
          ShowMessage("Datei " + Datei + " konnte nicht geöffnet werden!");
else {
          Form1->Code->Text = "";
          while(!Input.eof())
                {
                getline(Input,strLine);
                Form1->Memo->Lines->Append(strLine);
                }
           Input.close();
           }
```

Kommt dann folgender Fehler:
"[C++ Fehler] Unit1.cpp(46): E2285 Keine Übereinstimmung für 'getline<charT,traits,Allocator>(ifstream,AnsiString)' gefunden"

Obwohl Input vom Typ fstream und strLine ein AnsiString ist, oder?!

Weiß jemand was zu den anderen Fragen:


> Aber gibts denn grundsätzlich keine "normale" Möglichkeit char in
> String und umgekehrt zu konvertieren? also wie jetzt z.B.
> mit IntToStr() sowas in die richtung?
> 
> ...


----------



## goela (8. Januar 2003)

Du schon hast schon

```
#include <string>
#include <fstream>
using namespace std;
```
Includiert bzw. using namespace angewendet?

Leider kenne ich mich mit dem C++ Builder nicht aus. Weiss nicht, ob Du da noch zusätzlich in den Projektsettings was angeben (LIB etc.) muss, wenn die STL verwenden willst!


----------



## Sinac (8. Januar 2003)

Nein, daran lag es nicht!
<fstream> ist drin und <String> muss bei Borland nicht extra
includiert werden. Der Namespace ist angegeben!


----------

