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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Guest_Artur_*, 13 фев 2006.

Статус темы:
Закрыта.
  1. Guest_Artur_*

    Guest_Artur_* Гость

    У меня есть такой код, строка со знаками вопроса не катит для компилятора. Кто поможет?
    Код (Text):
    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);
           }
       }

    }
     
  2. ZZmiy

    ZZmiy Гость

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

    Anton Chik Гость

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

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

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

    Guest Гость

    Во первых
    Тип "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 симол хочешь присвоить целую строку ещё и другого типа !!
     
  5. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Гм. Не думаю что даже Builder позволяет такие вещи. Все таки скорее так:
    Код (Text):
    _tcsncpy(TName,Edit2->Text.c_str(), 99);
     
  6. Guest_Artur_*

    Guest_Artur_* Гость

  7. 62316e

    62316e Гость

    1) >> "мне совсем не понятна!!" - я даже знаю почему - потому, что РТФМ надо делать.
    Если не читаем цепепе, то хотябы в Ф1 ходим. а в ф1 четко написано:
    "AnsiString::c_str
    Returns the AnsiString converted to null-terminated character array.
    char* __fastcall c_str() const;"

    2) Ужос!
     
  8. Froex

    Froex Гость

    <!--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 символ.
     
  9. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Вообще-то будет 100 символов. В случае если использовать этот массив в качестве нультермированной строки, то максимальный размер строки 99+'\0,'
     
  10. Froex

    Froex Гость

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

Поделиться этой страницей