1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

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

    Guest_Artur_* Гость

    Репутация:
    0
    У меня есть такой код, строка со знаками вопроса не катит для компилятора. Кто поможет?
    Код:
    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 Гость

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

    Anton Chik Гость

    Репутация:
    0
    да откажись ты от char,
    пиши просто:

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

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

    Guest Гость

    Репутация:
    0
    Во первых
    Тип "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

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

    Guest_Artur_* Гость

    Репутация:
    0
  7. 62316e

    62316e Гость

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

    2) Ужос!
     
  8. Froex

    Froex Гость

    Репутация:
    0
    <!--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
    Java Team

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

    Froex Гость

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

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