Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. progstone

    progstone New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2007
    Сообщения:
    14
    IceFire
    вручную просматривай массивы
    смотря какая строка если анся то
    int k=0;
    while(arr!=0)
    {
    char t=arr-'0';
    k*=10;
    k+=t;
    }
    для unicode сам допиши
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    1.Разъясните значения прагм, для чего они:
    #pragma pack(push)
    #pragma pack(1)
    struct ...
    union
    ...
    struct

    #pragma pack(pop)

    2. Правильно ли я думаю, что при объявлений нового класса, метод с именем как у класса будет его конструктором, а такой же, но с тильдой в начале, будет деструктором?
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Правильно.
    вообще #pragma - некое указание компилятору или линкеру.
    конкретно pack-прагма указывает, какое должно быть выравнивание у структур.
    задает выравнивание в 1 байт (фактически отключает)
    восстанавливает старое выравнивание
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    1. Это управление выравниванием для структур, объединений и членов классов. Подробнее можно почитать тут. Для приведенного примера это значит:

    #pragma pack(push) /* Сохранить текущее выравнивание в стеке (во внутреннем стеке компилятора, не стеке программы) */
    #pragma pack(1) /* Установить значение выравнивания равным единице. */
    ...
    #pragma pack(pop) /* Восстановить значение выравнивания из внутреннего стека компилятора */

    2. Да.
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Спасибо обоим ;)
    Тока мне не понятно, почему тогда все структуры так не выравнивают?!
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    обычно пофиг на выравнивание структур, но иногда оно критично
     
  7. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    какая информативность ;)
     
  8. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    подскажите...

    В драйвере написал следующую конструкцию:

    Код (Text):
    1. const int NumItems=2;
    2.  
    3. typedef struct ListStr {
    4.     CHAR TmpName[0xFF];
    5.     unsigned short numbers[15];
    6. };
    7.  
    8. ListStr STable[NumItems]=
    9. {
    10. {"Name1",{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}},
    11. {"Name2",{0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001}}
    12. };
    После чего компилятор сказал:
    syntax error: identifier "STable"

    В MFC-приложении все "на ура". Че не так?
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    IceFire
    Файл имеет расширение C или CPP? Какой компилятор?
    Попробуй так
    Код (Text):
    1. ...
    2. struct ListStr STable[]=
    3. ...
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    В си имена структур, енумов и прочих "сложных" типов "сами по себе" использовать нельзя.
    Либо писать так:
    Код (Text):
    1. struct A {
    2. ..
    3. };
    4.  
    5. struct A var;
    Либо так: (так везде в DDK и так более "красиво" смотрится)
    Код (Text):
    1. typedef struct _A {
    2. ...
    3. } A;
    4.  
    5. A var;
     
  11. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Great, q_q


    Спасибо, все работает.
     
  12. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    Есть указатель BYTE *Variable, он содержит адрес массива данных, в этом массиве слово, как мне значение этого слова передать в AnsiString string?
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    что за тип AnsiString.
     
  14. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    Строковый тип
     
  15. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Код (Text):
    1. typedef struct _STRING {
    2.     USHORT Length;
    3.     USHORT MaximumLength;
    4.     PCHAR Buffer;
    5. } STRING, *PSTRING;
    6.  
    7.  
    8. typedef STRING ANSI_STRING;
    9. typedef PSTRING PANSI_STRING;
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    string.Buffer = malloc(20);
    sprintf(string.Buffer, "%d", *(PUSHORT)Variable);
     
  17. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    asmfan
    Это к чему?
     
  18. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    BCB
     
  19. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    привет всем.
    разъясните пожалуйста, каким образом в языке Си++ можно указать дефолтное значение для передаваемой функции в кач-ве параметра структуры?

    что-то типа:

    Код (Text):
    1. struct myStruct
    2. {
    3. int x;
    4. int y;
    5. };
    6.  
    7. void foo(const myStruct s = xxx)
    8. {
    9. //
    10. }
    вот чтО нужно написать на месте "xxx" в коде, если мы хотим, чтобы при отсутствии переданного параметра в ф-цию foo считать что s.x = 0; s.y = 0 ?

    понятно, что можно передавать указатель на структуру, что-то в духе:

    Код (Text):
    1. void foo(const myStruct *pS = 0)
    2. {
    3.    if (!pS)
    4.    {
    5.      //значит *pS.x = 0 и *pS.y = 0
    6.    }
    7. }
    но как-то не нравится мне такое решение. черезчур громоздкое и все такое))
     
  20. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    Юзать конструктор по умолчанию:
    Код (Text):
    1. void foo(/*const */myStruct s = myStruct())
    const я закомментировал, потому что в данной ситуации он ничего не дает, а только создаёт лишние проблемы тебе же. Зачем писать const, если s и так передаётся по значению, т.е. копированием структуры? Копию изменяй-не изменяй - никакой разницы.