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

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

  1. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    maxdiver,
    да, это то что я подзабыл. спасибо за помощь!
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    кстати, не в тему немного, но лучше передавать структуры, особенно от 8 байт и выше, по ссылке
     
  3. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    Great
    Да, передавать структуры по ссылке получится производительнее, но тогда будет лажа с параметрами по умолчанию. Если написать так:
    Код (Text):
    1. void f (const myStruct & s = myStruct())
    то часть компиляторов будет компилить, а часть - выдаст warning (intel) или даже error (g++). Не уверен, но вроде как такой код не соответствует Стандарту.
    Так что действительно немного не в тему ;)
     
  4. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    блин,мне уже неудобно (привык сам находить ответы на свои вопросы, но тут чего-то застрял).
    но скажите плз, какую си++ ф-цию юзать, для того чтобы вычислить размер файла, открытого через ф-цию fopen_s, и имея указатель на него, т.е. FILE* ?
    варианты с винАПИ ф-цией GetFileSize не предлагать.
    есть filelength ф-ция сишная, но для нее нужно чтобы был дескриптор на открытый файл типа int, а у меня ведь FILE*.

    в общем, жду совета.
     
  5. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    varnie
    насколько помню для FILE* нет. попробуй ручками:

    int get_file_sz(FILE* const f)
    {
    fpos_t curr_pos;
    fpos_t pos1;
    fpos_t pos2;
    fgetpos(f,&curr_pos);
    fseek(f,0, SEEK_SET);
    fgetpos(f,&pos1);
    fseek(f,0, SEEK_END);
    fgetpos(f,&pos2);
    fsetpos(f,&curr_pos);
    return (pos2-pos1);
    }
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    varnie
    Код (Text):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <io.h>
    4.  
    5. int main(int argc, char ** argv) {
    6.   FILE * fd;
    7.   fopen_s(&fd, "test.txt", "rb");
    8.   if (fd) {
    9.     // version 1
    10.     unsigned long fsize = filelength(fileno(fd));
    11.     // version 2
    12.     fseek(fd, 0, SEEK_END);
    13.     fsize = ftell(fd);
    14.     fseek(fd, 0, SEEK_SET);
    15.  
    16.     fclose(fd);
    17.   }
    18. }
    19.  
    20. /* [EOF] */
    PS достаточно почитать какую-нибудь книгу по С и вопросы отпадут сами по себе :)
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    varnie
    FILE* f;
    filelength(_fileno(f));
     
  8. varnie

    varnie New Member

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

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
  10. rancid

    rancid Олег

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    1
    написал небольшую программу, которая генерирует пароли. и вроде все прекрасно, но при генерации 6, 14 и 20 (и некоторых других значениях) символьных паролей, в конце добавляется некий символ. для 6 это @, для остальных - другие. в принципе и не мешают, сильно, но хотелось бы разобраться.
    Код (Text):
    1. #include <stdio.h>
    2. #include <time.h>
    3.  
    4. int main (int argc, char* argv[]){
    5. int i=0, j=0;
    6. int pass_length;                                      
    7. int pass_count;
    8. char *SYMBOLS= "-123456789abcdefghijklmnopqrstuvwxyz !\@#$\%^\&*()_=+{}[];:\'\"\\/*ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //86
    9. FILE *pass_list;
    10. char *password;
    11.  
    12.     srand(time(0));
    13.  
    14.     if ((argc<3) || (argc>4)){
    15.         return 0;
    16.     }
    17.  
    18.     for (i=0; i<argc; i++)      //if program execute with '-h' key, user will see help
    19.     if ((strcmp(argv[i], "-h"))== 0){
    20.         return 0;
    21.     }                      
    22.     pass_count= atoi (argv[1]);
    23.     if ((pass_count< 1) || (pass_count> 100)){
    24.         printf("Please, use correct values in count of passwords! in next time:)\n");
    25.         return 0;
    26.     }
    27.     printf ("Password\'s count: %d\n", pass_count);
    28.  
    29.     pass_length= atoi (argv[2]);
    30.     if ((pass_length< 6) || (pass_length> 20)){
    31.         printf ("Please, use correct values in length of your passwords! in next time :)\n");
    32.         return 0;
    33.     }
    34.     printf ("Passwords length is %d\n", pass_length);
    35.    
    36.     if (argc== 4){      //if parametr (file_for_passwords) used by user
    37.         if ((pass_list= fopen(argv[3], "a+"))== 0){
    38.             if ((pass_list= fopen (argv[3], "w"))== 0){
    39.                 printf ("Sorry. Error. I don\'t know what is it. Try later.\n");
    40.                 return 0;
    41.             }
    42.         }
    43.     } else {
    44.         if ((pass_list= fopen ("password_list.txt", "a+"))== 0){
    45.             if ((pass_list= fopen ("password_list.txt", "w"))== 0){
    46.                 printf ("Sorry. Error. I don\'t know what is it. Try later.\n");
    47.                 return 0;
    48.             }
    49.         }      
    50.     }
    51.     for (j= 0; j<pass_count; j++){
    52.         password= (char*) malloc((pass_length)*sizeof(char));
    53.         for (i= 0; i<pass_length; i++) password[i]= SYMBOLS[rand()%85];
    54.         fputc('\n', pass_list);
    55.         fputs(password, pass_list);
    56.         free(password);
    57.     }
    58.  
    59.     fclose (pass_list);
    60.     return 0;
    61. }
    при запуске "pass 2 6" выдает"
    *MUye@
    9)CQAh@

    "pass 8 20"

    Ki1eq7J[};HtnSl$qzQ"Ф
    Hi_n_M^/Pq:ky)t55gwRФ
    ...
    а вот "pass 6 7" выдает нормальные результаты:
    jAP+9wC;
    *OK5B{9$
    ...
    буду рад любой подсказке
    ps компилятор от борланда
     
  11. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    делой на 1 байт больше и положи в последний байт \0
     
  12. Headerx

    Headerx Moore

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    64
    Адрес:
    Atyrau
    ехешник не создается. от копилятора получаю вот такое сообщение: no resource
    а ide у меня - dev c++
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Headerx
    мейби дашь больше информации?
     
  14. Headerx

    Headerx Moore

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    64
    Адрес:
    Atyrau
    GReat
    попытался решить проблему самостаятелно и кажется разобрался - скопировал в папку *:\dev-cpp\include заг.файлы из
    *:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\ и вроде получилось. смешно конечно, ведь это был всего лишь hello_world. эх думаю придется всетаки качать msvc++
     
  15. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    pbData содержит строку данных которая каждый раз меняется в цикле, как сделать так чтоб когда я присваиваю значение pbData переменной Name, Name содержало строку а не что-то вроде 0013FB44

    Код (Text):
    1. BYTE pbData;
    2. LPTSTR Name[20];
    3. int i;
    4.  
    5. for (i=0;i<20;i++)
    6. Name[i]=pbDta;
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    TCHAR *pbData;
    LPTSTR Name[20]

    memcpy(pbData, Name, sizeof(TCHAR) * 20);
     
  17. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    только вроде
    memcpy(Name,pbData,sizeof(TCHAR) * 20);
     
  18. censored

    censored New Member

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

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    в виде "строка символов"
     
  20. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    TCHAR... да и цикл, приведенный в №195...

    з.ы 200