PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum geht AnsiString symbol="\"; nicht ?


Unregistered
2003-03-12, 14:03:30
void __fastcall TForm1::ffnen2Click(TObject *Sender)
{

diopn->Execute();
AnsiString Filename;
Filename=diopn->Files->GetText();
int zahl=Filename.Length();
zahl=zahl+1;
AnsiString merk=Filename;
static char *austausch = new char[zahl];
strcpy( austausch, Filename.c_str());

AnsiString symbol="\";

for (int i=0;i<Filename.Length();i++)
{
if (austausch[i]==symbol)
{
austausch[i]=='/';

}
}
Filename="";
for (int o=0;o<merk.Length();o++)
{
Filename=Filename+austausch[o];
}

try
{

mema->Lines->LoadFromFile(Filename);
}
catch (...)
{
ShowMessage("Fehler");
}
}
Wieso kommt beim Befehl AnsiString symbol="\"; eine Fehlermeldung durch den Compiler das die Zeichenkette nicht abgeschlossen?

Demirug
2003-03-12, 14:24:56
Weil man das \ Zeichen in C und C++ immer doppelt schreiben muss also \\. Das kommt daher das man mit \ auch steuercodes einleitet z.B ist \t ein tabsprung


\a Bell (alert)
\b Backspace
\f Formfeed
\n New line
\r Carriage return
\t Horizontal tab
\v Vertical tab
\' Single quotation mark
\" Double quotation mark
\\ Backslash
\? Literal question mark
\ooo ASCII character in octal notation
\xhh ASCII character in hexadecimal notation

Unregistered
2003-03-12, 14:54:04
aktueller Code:
void __fastcall TForm1::ffnen2Click(TObject *Sender)
{

diopn->Execute();
AnsiString Filename;
Filename=diopn->Files->GetText();
int zahl=Filename.Length();
zahl=zahl+1;
AnsiString merk=Filename;
static char *austausch = new char[zahl]; // statt \ /
strcpy( austausch, Filename.c_str());

AnsiString symbol="\\";

for (int i=0;i<Filename.Length()-3;i++)
{
ShowMessage(austausch[i]);
/*
if (austausch[i]==symbol)
{

austausch[i]=='/';

}
*/
}
Filename="";
for (int o=0;o<merk.Length();o++)
{
Filename=Filename+austausch[o];
}

try
{

mema->Lines->LoadFromFile(Filename);
}
catch (...)
{
ShowMessage("Fehler");
}
delete austausch;
}
Warum gibt es einen Absturz wenn das Programm läuft
bei den Zeilen
if (austausch[i]==symbol)
{

austausch[i]=='/';

}
?

stabilo_boss13
2003-03-12, 15:34:30
Du versuchst einen static char* mit einem AnsiString durch einen Vergleichsoperator zu vergleichen:

if (austausch[i]==symbol)

Das geht nicht.

Versuch es mal so:

if (austausch[i]==92); // 92 ist der ASCII-Code von '\\'

Unregistered
2003-03-12, 15:57:07
thx jetzt funzt mein Programm

zeckensack
2003-03-13, 00:58:10
Übrigens, mitchar symbol='\\\';Wär's auch gegangen. Man beachte die einzelnen Anführungszeichen und den Datentyp char statt AnsiString.

Vedek Bareil
2003-03-13, 05:02:37
Originally posted by Unregistered
void __fastcall TForm1::ffnen2Click(TObject *Sender) warum erinnert mich diese Zeile nur so an Delphi? Ist das der Borland C++ Builder?

stabilo_boss13
2003-03-13, 07:51:49
Originally posted by Vedek Bareil
warum erinnert mich diese Zeile nur so an Delphi? Ist das der Borland C++ Builder? Ist AnsiString nicht sowieso nur ein von Borland verwendeter Datentyp?

Unregistered
2003-03-13, 21:39:48
@Vedek Bareil
Wie du schon richtig gedacht hast , ist das Code der mit dem Borland c++ Builder compiliert werden kann.