[ 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. Fl0dER

    Fl0dER New Member

    Joined:
    22 Dec 2008
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    Дело в том что я и так юзаю Release , но прога не работала на других компах , после этого в настройках проэкта в CodeGeneration поставил Runtime Libary = /mt стала работать, но и вес вырос с 12-до-90кб .
     
    #2341 Fl0dER, 14 Feb 2009
    Last edited: 14 Feb 2009
  2. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    Ну помоему это логично, он подцепил в себя библиотеки. А с тебе настройками, что раньше были (когда прога не запускалась на других компах) библиотеки искались в системе. Можешь ради инетереса поставить виртуальную машину и на нее визуал студию и тогда там прога должна запустится.
     
  3. Fl0dER

    Fl0dER New Member

    Joined:
    22 Dec 2008
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    Это я понимаю , но меня мучиет вопрос : про вирус весом 11 кб написаный на C++ , как так ? Если даже Hello World 56кб когда ставлю /mt параметр ибо без него моя проги незапустится там где нет VC++ =|
     
  4. FoX's

    FoX's Дохлый

    Joined:
    26 Dec 2004
    Messages:
    169
    Likes Received:
    29
    Reputations:
    0
    не использовать crt.. это malloc printf fopen и тд.
     
  5. rudvil

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

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    return массива

    Всем здрасьте)
    Возникла проблема =[ можно ли в пользовательской функции сделать ретурн массива,пример:
    Code:
    string test()
    {
        string names[1];
        names[0] = "test";
        return names;
    }
    при таком раскладе пишет ошибку(неверный параметр в ретурне как-то так)
    пробовал делать так:
    Code:
    string[] test()
    {
        string names[1];
        names[0] = "test";
        return names;
    }
    и так:
    Code:
    string test()
    {
        string names[1];
        names[0] = "test";
        return names[];
    }
    всеравно пишет ошибку...
    Собственно и вопрос как правильно реализовать ретурн массива?
     
  6. Fl0dER

    Fl0dER New Member

    Joined:
    22 Dec 2008
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    Я так понял значит и функции sprintf wsprintf и т.д ?
    Но какже без них О_о
     
  7. FoX's

    FoX's Дохлый

    Joined:
    26 Dec 2004
    Messages:
    169
    Likes Received:
    29
    Reputations:
    0
    wsprintf - это и есть замена sprintf..
    посмотри в мсдн
     
  8. Fl0dER

    Fl0dER New Member

    Joined:
    22 Dec 2008
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    А как вобще отключить CRT ?

    Компилю

    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
    cout << "hello ";
    }

    и вижу
    Code:
    'Consol.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcp90.dll'
    'Consol.exe': Loaded 'C:\WINDOWS\WinSxS
    \x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcr90.dll'
     
  9. rudvil

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

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    return не забывай прописывать...
    Code:
    int main()
    {
    cout << "hello ";
    return 0;
    }
    
     
  10. 4y4o

    4y4o Elder - Старейшина

    Joined:
    22 Jan 2007
    Messages:
    40
    Likes Received:
    2
    Reputations:
    0
    #include "stdafx.h"
    #include "windows.h"
    #include <iostream>
    int main()
    {
    STARTUPINFOA si;
    PROCESS_INFORMATION pi;
    ZeroMemory( &si, sizeof(si) );
    ZeroMemory( &pi, sizeof(pi) );
    SECURITY_ATTRIBUTES secat;
    secat.nLength = sizeof(SECURITY_ATTRIBUTES);
    secat.bInheritHandle = TRUE;
    HANDLE newin, writein;
    CreatePipe(&newin,&writein,&secat,0);
    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOWNORMAL;
    si.hStdInput=newin;
    GetStartupInfoA(&si);
    si.cb;
    CreateProcessA(NULL, "cmd.exe", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    DWORD bytes;
    char command[100] = "mkdir 1254655553";
    WriteFile(writein, command, 100, &bytes, NULL);
    std::cin.get();
    }


    Уважаемые отцы объясните боту патчему не создаётся папка )
     
  11. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Универсальный дебагер тебе в руки:

    Code:
    LPVOID lpMsgBuf;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        GetLastError(),
        0,
        (LPTSTR) &lpMsgBuf,
        0,
        NULL
    );
    MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
    LocalFree(lpMsgBuf);
    

    Вызови этот код после CreatePipe, после CreateProcess и сам всё узнаешь. А вообще для кого придумали обработку ошибок?
     
  12. 4y4o

    4y4o Elder - Старейшина

    Joined:
    22 Jan 2007
    Messages:
    40
    Likes Received:
    2
    Reputations:
    0
    ничё не получилось
     
  13. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Это как?
     
  14. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    #include <winows.h>

    CreateDirectory();
     
  15. xismyname

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

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5
    А string это случайно не класс ? :)
    В C твоя проблема решается так :

    Code:
    char *func(void)
    {
        char *str = (char*)malloc( sizeof(char) * 16 );
        // do something...
        // end return pointer to char
       return str;
    }
    В как в C++ не могу точно сказать, но можно по пробовать такой же вариант как в C.
     
    1 person likes this.
  16. rudvil

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

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    2xismyname, боюсь это не то что я имел ввиду, но все равно спасибо)
    Сейчас приведу пример(не рабочий) но покажу хотябы свиду что я имел ввиду...
    Code:
    string test()
    {
        string data[3];
        data[0] = 'Hello1';
        data[1] = 'Hello2';
        data[2] = 'Hello3';
        /*Что-то типо такого и затем эту переменную data вернуть т.е. сделать return*/
        return data;//А вот тут пишет ошибку =[
    }
    
     
  17. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    попробуй обьявить массив до вызова ф-ции и передавай в ф-цию массив как параметр в ф-цию и возвращять не надо ничё т.к вроде массив этот как указатели ... тоесть имя массива это указатель на первую ячейку последовлольности ячеек памяти (сам не понел чё сказал :D) чёт типо того =)
     
    1 person likes this.
  18. rudvil

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

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Смысл понял), но не прокатывает... пишет такуюже ошибку =[
    Code:
    c:\users\rudvil\documents\visual studio 2008\projects\learn_arrays\learn_arrays\arrays.cpp(40) : error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it)' : cannot convert parameter 1 from 'std::string [3]' to 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it'
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>,
    1>            _Ax=std::allocator<char>
    1>        ]
    1>        Constructor for struct 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it' is declared 'explicit'
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>,
    1>            _Ax=std::allocator<char>
    1>        ]
    
    Хм, а это вообще можно делать в C++?...
     
  19. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Code:
    
    #include <string>
    #include <iostream>
    
    void test(std::string []);
    
    int main()
    {
    	std::string test2[3];
    	test(test2);
    	std::cout << test2[2];
    
    	return 0;
    }
    
    void test(std::string test[])
    {
    	test[0] = "data";
    	test[1] = "data2";
    	test[2] = "data3";
    }
    
    
    
    всё отлично коплится
     
    1 person likes this.
  20. 4y4o

    4y4o Elder - Старейшина

    Joined:
    22 Jan 2007
    Messages:
    40
    Likes Received:
    2
    Reputations:
    0
    #include "stdafx.h"
    #include "windows.h"
    #include <iostream>
    int main()
    {
    STARTUPINFOA si;
    PROCESS_INFORMATION pi;
    ZeroMemory( &si, sizeof(si) );
    ZeroMemory( &pi, sizeof(pi) );
    SECURITY_ATTRIBUTES secat;
    secat.nLength = sizeof(SECURITY_ATTRIBUTES);
    secat.bInheritHandle = TRUE;
    HANDLE newin, writein;
    CreatePipe(&newin,&writein,&secat,0);
    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOWNORMAL;
    si.hStdInput=newin;
    GetStartupInfoA(&si);
    si.cb;
    CreateProcessA(NULL, "cmd.exe", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    DWORD bytes;
    char command[100] = "mkdir 1254655553";
    WriteFile(writein, command, 100, &bytes, NULL);
    std::cin.get();
    }

    Дяди! Патчему папка не создаётся? бот в шоке ))
     
Thread Status:
Not open for further replies.