Дело в том что я и так юзаю Release , но прога не работала на других компах , после этого в настройках проэкта в CodeGeneration поставил Runtime Libary = /mt стала работать, но и вес вырос с 12-до-90кб .
Ну помоему это логично, он подцепил в себя библиотеки. А с тебе настройками, что раньше были (когда прога не запускалась на других компах) библиотеки искались в системе. Можешь ради инетереса поставить виртуальную машину и на нее визуал студию и тогда там прога должна запустится.
Это я понимаю , но меня мучиет вопрос : про вирус весом 11 кб написаный на C++ , как так ? Если даже Hello World 56кб когда ставлю /mt параметр ибо без него моя проги незапустится там где нет VC++ =|
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[]; } всеравно пишет ошибку... Собственно и вопрос как правильно реализовать ретурн массива?
А как вобще отключить 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'
#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(); } Уважаемые отцы объясните боту патчему не создаётся папка )
Универсальный дебагер тебе в руки: 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 и сам всё узнаешь. А вообще для кого придумали обработку ошибок?
А string это случайно не класс ? В C твоя проблема решается так : Code: char *func(void) { char *str = (char*)malloc( sizeof(char) * 16 ); // do something... // end return pointer to char return str; } В как в C++ не могу точно сказать, но можно по пробовать такой же вариант как в C.
2xismyname, боюсь это не то что я имел ввиду, но все равно спасибо) Сейчас приведу пример(не рабочий) но покажу хотябы свиду что я имел ввиду... Code: string test() { string data[3]; data[0] = 'Hello1'; data[1] = 'Hello2'; data[2] = 'Hello3'; /*Что-то типо такого и затем эту переменную data вернуть т.е. сделать return*/ return data;//А вот тут пишет ошибку =[ }
попробуй обьявить массив до вызова ф-ции и передавай в ф-цию массив как параметр в ф-цию и возвращять не надо ничё т.к вроде массив этот как указатели ... тоесть имя массива это указатель на первую ячейку последовлольности ячеек памяти (сам не понел чё сказал ) чёт типо того =)
Смысл понял), но не прокатывает... пишет такуюже ошибку =[ 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++?...
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"; } всё отлично коплится
#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(); } Дяди! Патчему папка не создаётся? бот в шоке ))