Помогите ламеру

  • Автор темы Guest_Artur_*
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest_Artur_*

Гость
#1
У меня есть такой код, строка со знаками вопроса не катит для компилятора. Кто поможет?
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int iFileHandleF;
char TName [1];

   if (FileExists("FAR.dat")) {
       FileOpen("FAR.dat", fmOpenRead);
       FileRead(iFileHandleF, &TName[0], sizeof(TName[0]));
       Edit1->Text = &TName[0];
       FileClose(iFileHandleF);
   }
   else {
       if (iFileHandleF = FileCreate("FAR.dat")) {
           &TName[0] = Edit2->Text;   // <--- ??????????????????
           FileWrite(iFileHandleF, &TName[0], sizeof(TName[0]));
           FileClose(iFileHandleF);
       }
   }

}
 
Z

ZZmiy

Гость
#2
:P
А что, по вашему, должно происходить в этой строке?
Во первых, зачем объявлять char TName [1]????
Во-вторых &TName[0] - это, видимо, указатель на ТName, а Edit2->Text - это что?
да и описание ошибки полезно читать...
 
A

Anton Chik

Гость
#3
да откажись ты от char,
пиши просто:

AnsiString TName;
...
TName = Edit2->Text;

потом по надобности используй TName.c_str();
или вообще подставляй везде напрямик Edit2->Text.c_str();
 
G

Guest

Гость
#4
Во первых
Тип "char" это символьный тип. Если описать переменную так как ты это сделал "char TName [1];" то получится переменная спопобная вмещать в себя 1 символ. Для того чтобы при помощи "char" описать строку нужно вот так написать "char TName [100];", вот это строка, а точнее массив символов способный вместить строку из 100 символов, еще можно строку так описать "AnsiString TName;" или "String TName;"
Во вторых
Перед строкой не нужно писать симвод & !!! &TName[0] и TName совершенно едентичны.
В третьех
Вот эта строчка "&TName[0] = Edit2->Text;" мне совсем не понятна!! Правильно так будет:
Если описать: char TName[100];
То присваевание так должно выглядеть: TName = Edit2->Text.c_str();
Если описать: AnsiString TName;
Тогда присваивание выглядит так: TName = Edit2->Text;
А у тебя получается так что ты к переменной длинной в 1 симол хочешь присвоить целую строку ещё и другого типа !!
 

grigsoft

Well-Known Member
15.11.2005
735
0
#5
Если описать: char TName[100];
То присваевание так должно выглядеть: TName = Edit2->Text.c_str();
Гм. Не думаю что даже Builder позволяет такие вещи. Все таки скорее так:
Код:
_tcsncpy(TName,Edit2->Text.c_str(), 99);
 
6

62316e

Гость
#7
Вот эта строчка "&TName[0] = Edit2->Text;" мне совсем не понятна!! Правильно так будет:
Если описать: char TName[100];
То присваевание так должно выглядеть: TName = Edit2->Text.c_str();
Если описать: AnsiString TName;
Тогда присваивание выглядит так: TName = Edit2->Text;
А у тебя получается так что ты к переменной длинной в 1 симол хочешь присвоить целую строку ещё и другого типа !!
1) >> "мне совсем не понятна!!" - я даже знаю почему - потому, что РТФМ надо делать.
Если не читаем цепепе, то хотябы в Ф1 ходим. а в ф1 четко написано:
"AnsiString::c_str
Returns the AnsiString converted to null-terminated character array.
char* __fastcall c_str() const;"

2) Ужос!
 
F

Froex

Гость
#8
<!--QuoteBegin-Guest+14:02:2006, 12:30 -->
<span class="vbquote">(Guest @ 14:02:2006, 12:30 )</span><!--QuoteEBegin-->"char TName [100];", вот это строка, а точнее массив символов способный вместить строку из 100 символов
[snapback]30577" rel="nofollow" target="_blank[/snapback]​
[/quote]
:) Вообще-то будет 101 символ.
 
F

Froex

Гость
#10
Ну это то да. :lol: Но если не нультермированной строки, то будет 101(+символ окончания строки)
 
Статус
Закрыто для дальнейших ответов.