Hexbinary Temat założony przez niniejszego użytkownika |
Odpalanie programu B(z przekazną tablicą) przez program A (przekazujący tablice) » 2014-11-29 20:50:03 Mój problem wygląda następująco. Chce po prostu wywołać inny program z tablicą przekazaną przez obecnie działający program. #include <iostream> #include <stdlib.h> #include <windows.h> int main() { char * str = "ZNAKIWTABLICY"; char * a =( char * ) malloc( sizeof( char * 20 ); memcpy( a, str, strlen( str ) ); return 0; }
#include <iostream> int main( int argc, char * argv[], char * MojaTablica ) { std::cout << MojaTablica << "\n"; return 0; }
|
|
NiceFox |
» 2014-11-29 22:46:35 Może zapisz do pliku i odczytaj plik w B. |
|
Hexbinary Temat założony przez niniejszego użytkownika |
» 2014-11-30 11:27:59 To oczywiste rozwiązanie, lepiej by było użyć jakiegoś łącza miedzy procesami. Ale mi nie o to chodzi na pewno da się wywołać jakoś funkcje z bufforem na linuxsie to leci tak. Przejrzałem archiwa. AAAAAAAAAAAAAAAAAAA #include <stdlib.h> int main( int argc, int * argv[] ) { char * buff = new char[ 20 ]; execl( "./B", "B", buff, 0 ); } BBBBBBBBBBBBBBBBBBBBB #include <stdlib.h> #include <string.h> int main( int argc, char * argv[] ) { char * buff = new char[ 500 ]; memcpy( buff, argv[ 1 ], strlen( argv[ 1 ] ) ); return 0; }
Jak to zrobić na windows ???? |
|
CodeMeister |
» 2014-12-05 14:57:21 możesz użyć system() zamiast execl(), co prawda każdy odradza jego stosowanie ale do jakiegoś małego programiku nie zaszkodzi. |
|
Hexbinary Temat założony przez niniejszego użytkownika |
» 2014-12-05 19:55:21 Nie za bardzo wiem jak to przerobić na funkcje system ,bo nie znam poleceń systemowych windows. doc int system( const char * cmd ) http://cpp0x.pl/dokumentacja/standard-C/system/458A co jest w niej takiego złego. Twórcy softa boją się ,że jak ktoś znajdzie funkcje system() w programie, a potem jakimś cudem przejmie kontrole nad bufforem przekazanym do cmd, zapanuje nad system bo będzie mógł wywołać każde polecenie windows ?? |
|
Kaikso |
» 2014-12-05 22:07:33 Z funkcją system będzie to mniej więcej tak wyglądało: #include <stdlib.h> #include <stdio.h> int main( int argc, int * argv[] ) { char * buff = new char[ 20 ]; char * cmdline = new char[ 64 ]; sprintf( cmdline, "B %s", buff ); system( cmdline ); }
#include <string.h> int main( int argc, char * argv[] ) { char * buff = new char[ 500 ]; memcpy( buff, argv[ 1 ], strlen( argv[ 1 ] ) ); return 0; }
|
|
Hexbinary Temat założony przez niniejszego użytkownika |
» 2014-12-06 10:09:06 Działa elegancko, a to innym pomoże zrozumieć czym jest argv. #include <stdlib.h> #include <stdio.h> #include <string.h> int main( int argc, int * argv[] ) { printf( "Program A\n" ); char * buff = new char[ 20 ]; buff = "Przekaz mysli"; char * cmdline = new char[ 64 ]; * cmdline = 'B'; ++cmdline; * cmdline = ' '; ++cmdline; memcpy( cmdline, buff, strlen( buff ) ); cmdline--; cmdline--; printf( "%s\n", cmdline ); system( cmdline ); return 0; }
#include <string.h> #include <stdio.h> int main( int argc, char * argv[] ) { printf( "Program B\n" ); char * buff = new char[ 500 ]; memcpy( buff, argv[ 1 ], strlen( argv[ 1 ] ) ); for( int i = 0; i < 4; i++ ) printf( "argv[%d] %s\n", i, argv[ i ] ); printf( "buff %s\n", buff ); return 0; }
|
|
Kaikso |
» 2014-12-06 14:52:41 Jeszcze poprawie trochę twój kod ;) #include <stdlib.h> #include <stdio.h> #include <string.h> int main( int argc, char * argv[] ) { printf( "Program A\n" ); char * buff = new char[ 20 ]; strcpy( buff, "Przekaz mysli" ); char * cmdline = new char[ 64 ]; * cmdline = 'B'; ++cmdline; * cmdline = ' '; ++cmdline; strcpy( cmdline, buff ); cmdline--; cmdline--; printf( "%s\n", cmdline ); system( cmdline ); return 0; }
|
|
« 1 » |