[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. kRa$I-I

    kRa$I-I New Member

    Joined:
    23 Jan 2009
    Messages:
    30
    Likes Received:
    1
    Reputations:
    5
    Raskal ты зря думаешь что мне рано и я задаю вопросы потому, что жить скучно. У меня на компе самоучителей по С++ штук 8 валяется....один из них меня заинтересовал "освой С++ за 21 день" и я его читаю.....просто во всех книгах описываются перегруженные функции, операторы, типы данных и классы, как по шаблону....но нигде не написанна разница между массивами данных массивом данных заканчиваюшимся 0 и анси строкой заканчивающейся 0.....Просто после Object Pascal где был тип string такое изобилие строк в с++ мне непонятно......
    И если так трудно ответить на такой простой вопрос, может вопрос не такой уж простой?
    Я пытаюсь делать так:

    private: System::Void bbConn_Click(System::Object^ sender, System::EventArgs^ e) {
    String ^szAddr = "172.23.0.74";
    SOCKET hSocket;
    struct sockaddr_in server;
    //Получаем IP servera
    szAddr = textBox1->Text;
    //Создаем сокет
    hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    //Заполняем структуру sockaddr_in
    server.sin_family = AF_INET;
    server.sin_port = htons(1313);
    server.sin_addr.S_un.S_addr = inet_addr(szAddr);
    iRet = connect(hSocket, server, sizeof(server));
    }
    А он говорит: error C2664: inet_addr: невозможно преобразовать параметр 1 из 'System::String ^' в 'const char *'
    Я и пытаюсь разобратся в изобилии строк С++.....Раздел ведь для новичков....
     
  2. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    ну а зачем ты себе жизнь усложняешь, используя мэнэджед с++ ? разберись сначала с чистым с++ без всякого гуя. а ты пытаешься все и сразу освоить. char* - обычный массив символов, заканчивается на 0. но не обязательно. ибо в си как таковых строк не было. в си все массивы по сути байтовые, суй что хочешь. просто задание типа char подсказывает программисту, что это массив символов. но ты легко засунешь туда любые байты, которые не отражают никаких символов. а char* как раз растет из си. на деле этот тип данных используют очень редко. только при вызовах апи. ибо в виндос строки представляют из себя также терминированные нулем массивы байтов. но внутри своей программы ты можешь(и даже должен) использовать более адекватные типы. например класс std::string. по сути это просто оболочка для char*. по сути все классы строк - оболочки для char*. они управляют памятью, предоставляют сервисные методы типа toUpper, или перегруженные методы для сравнения и складывания строк. У всех есть метод получения указателя на строку. для того, чтобы как раз использовать эти классы с системными вызовами. дальше идет класс CString из atl или мфц. он весьма удобный, но не кроссплатформенный. у него метод получения строки GetBuffer(). у класса std::string метод получения указателя c_str(). так же операторы перегружены приведения типов, например LPCSTR. а вот использование мэнэджэд с++ приводит к проблемам, ибо по философии дотнет программисту не дается право управлять памятью напрямую. управление памятью лежит на совести вм дотнета. суть в том что мэнэджэд программы не должны вызывать апи и старые функции. потому что это нарушает философию. для этого в дотнете есть ОГРОМНОЕ количество классов, полностью повторяющих апи. именно поэтому учиться с++ с мэнэджэд плюсов мягко говоря глупо. ты учишь наполовину с++ наполовину дотнет, причем не понимаешь, в чем суть дотнета. хочешь делать окошки - используй мфц проекты с++.
     
    #2982 Ra$cal, 18 May 2009
    Last edited: 18 May 2009
    1 person likes this.
  3. Vados

    Vados New Member

    Joined:
    4 May 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Как сделать запрет ввода букв в TextBox в Visual Studio 2008 C++
     
  4. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    поищи свойство ReadOnly или что то похожее)
     
  5. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    [deleted]
     
    #2985 awdrg, 23 May 2009
    Last edited: 24 May 2009
  6. Mosvit

    Mosvit Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    Помогите решить вот такую задачу на языке C

    Буду очень благодарен! Нужно срочно сдать, но я даже в задание не врубаюсь :(((
     
  7. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    у тебя в out копируется принятые данные только один раз, убери точку с запятой после while.
    Вот например:
     
  8. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    упс, это опечатка, в любом случае самого кода больше чем размер буффера выходит.
     
    #2988 awdrg, 23 May 2009
    Last edited: 23 May 2009
  9. Mosvit

    Mosvit Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    Плачу 100 рублей за решение, нужно срочно!!!
     
  10. ysmat

    ysmat Member

    Joined:
    20 Apr 2006
    Messages:
    89
    Likes Received:
    5
    Reputations:
    -3
    не работает цикл поиска
    задача найти в файле 1.bin байт E9
    там он точно есть
    однако цикл почему то работает безконечно
    то есть прога просто виснет и все

    Code:
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    char buffer = 0;
    int  counter = 0;
    int  bufer0 = 0;
    int  bufer1 = 0;
    int  adres = 0;
    const char filename1[] = "1.bin"   //имена файлов
    const char filename2[] = "2.bin";
    
    
    int main(void)
    {                                                                                
    fstream file1(filename1,ios::in);   //открываем файлы
    fstream file2(filename2,ios::out);                                                                                     
    file1.seekg(adres,ios::beg);        //начальная установка адреса чтения (0) чтение с начала файла
    file2.seekp(adres,ios::beg);        //начальная установка адреса записи (0) запись с начала файла
    
     
     while(bufer0 != 233)               // цикл поиска байта 0xE9
     { 
     file1.seekg(adres);                // устанавливаем адрес   
     file1.read(&buffer,1);             // считываем содержимое по адресу в буфер 
     bufer0 = buffer;                   
     adres ++;                          // inc adres
     }                                  // зацикленно
    
                                        //закрыть файлы
    file1.close();
    file2.close();
    return 0;
    }
    
     
  11. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    ysmat
    char buffer = 0; - знаковое целое. максимальное значение +127. а ты проверяешь с числов 233. естественно никогда не выполнится условие. когда компилируешь - внимательно смотри в окно результата. там тебя компилятор наверняка предупредил о сравнении беззнакового числа со знаковым. ну или на худой конец учись дебажить. эту ошибку обнаружить очень просто - ставишь в начале файла свой байт и дебажишь первую же итерацию.

    зы: объявляй переменную unsigned char;
     
  12. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Столкнулся еще с такой проблемой на С++: есть массив из текста, например
    Code:
    dfdffghfgh<b>jisjgdfgidj</b>vjiuhgufdhg<b>sgdfg</b>jiosjfdds<b>oijsidjfisd</b>
    
    нужно как то отсортировать и вывести текст между тегами. Есть ли в с++ аналог функции preg_match_all для этих целей? Пробовал методом грубого перебора, но он занимает длительное время =/
     
    #2992 awdrg, 24 May 2009
    Last edited: 24 May 2009
  13. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
  14. Mosvit

    Mosvit Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    Привет!
    Нужна помощь с этой программой на "C":

    Написать подпрограмму, реализующую динамический строку в виде структуры: struct array {char * string; /* ссылка на строку */ int size; /* размер строки */ }. Реализовать функции создания, удаления, конкатенации строк, а также обеспечить выборку подстрок и символов в указанной строке.
     
  15. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Доброго времени суток!

    Возник такой вопрос. В Visual Studio 2008 не рабоотает fseek (in, 0, 2). (на Си) То есть он как бы всё принимает и компилит, но в процессе выполнения вылетает ошибка stream!=NULL То есть как я понимаю он не может найти конец открываемого файла (в проге он открывает текстовый файлик). Самое главное, что в gcc всё в этом месте работало отлично... :confused:
     
  16. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    VIP
    это не ошибка. это ассерт. проверь значение параметра in, реальный ли это файл. есть подозрение, что in = NULL...
     
  17. Balvan

    Balvan Member

    Joined:
    11 Mar 2009
    Messages:
    66
    Likes Received:
    5
    Reputations:
    0
    будьте добры, дайте ссылочку на справочник по API в Windows Mobile!
     
  18. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    Подскажите мoжно ли в Визул студии как-то при компиляции и запуске прописать *ARGV[], например мне надо отладить "asdf.exe data.txt" ?
     
  19. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Проект -> Свойства: xxx -> Свойства конфигурации -> Отладка -> Командные аргументы
     
    1 person likes this.
  20. unfii

    unfii New Member

    Joined:
    19 Apr 2009
    Messages:
    12
    Likes Received:
    1
    Reputations:
    0
    В неком файле file.txt имееться данные следующего типа:
    , где Babyrka-фамилия охотника, 12-количество убитых животных, 300-вес убитых охотником животных
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct
    {
    char prizvishe[256];
    int vpol;
    int vaga;
    } address;
    void main ()
    {
    struct oxota
    {
    char prizvishe[256];
    int vpol;
    int vaga;};
    struct oxota oxota1;
    FILE*f;
    f=fopen("file.txt","w");
    fscanf(f,"%s %i %i",oxota1.prizvishe,&oxota1.vpol,&oxota1.vaga);
    printf("\n Danue tablicu");
    printf("\n ___________________________________________");
    printf("\n Familiya oxotinka %c",oxota1.prizvishe);
    printf("\n Kilkistb vpolovanux tvarun %i",oxota1.vpol);
    printf("\n Zagalna vaga vsix tvarun %i",oxota1.vaga);
    fclose(f);
    }
    Как осуществить вывод данных с file.txt?
     
Thread Status:
Not open for further replies.