Ir ao conteúdo

Passar parametros para outro arquivo em C


PolaR

Posts recomendados

Postado

Olá pessoal,

Estou precisando chamar outro arquivo em C a partir de um arquivo em C principal.

Pra chamar, estou usando o "system("arquivo");" e o programa abre normalmente sem problema.

porém eu preciso passar parametros do programa principal para esse arquivo chamado, tentei fazer "system("arquivo"(x));". Mas na hora de compilar, diz ""arquivo" cannot be used as a function.".

Como faço pra passar esse parametro do programa principal (que chemei de 'x'), para o programa "arquivo" que quero abrir?

Agradeço qualquer ajuda vinda.

Postado

Deixa eu ver se eu entendi, você compilou um programa em C, e precisa chamá-lo a partir de outro, para isso está usando system, então você quer passar argumentos para o main do programa compilado (afinal é a única função para qual você pode passar argumentos depois do programa já estar compilado), ora, na string com o programa sendo chamado adicione os parâmetros a serem passados a main como você faria na linha de comando.

Postado

Eu fiz isso, mas não deu certo...

Vou tentar explicar melhor:

Tenho um arquivo onde vai roda meu programa principal, que chamarei de main. Mas também tenho um outro programa, que chamarei de secundary. Ambos estão escritos em C.

Acontece que durante a execução do main, eu preciso chamar o programa secundary, para retornar um valor dela de volta para o main. Mas esse secundary usa um parametro que precisa ser dado pelo programa main.

Foi então que tentei fazer:

(no programa main)

y = system ("secundary"(x));

Onde to tentando passar o parametro 'x' para o programa secundary, e o retorno dela to guardando em y.

Mas quando faço isso, na hora de compilar, dá um aviso ""secundary" cannot be used as a function".

Se eu tirar o 'x' dali, ou seja, nao passar nenhum parametro pro programa secundary, de forma que a linha do codigo fique:

y = system ("secundary");

O programa funciona normalmente, sem nenhum aviso ou erro. E o 'y' realmente fica com o valor retornado pelo programa secundary.

Postado

Acho que seu seu programa "arquivo" deve ter do tipo:

int main(char *argv[]){

// TO DO

}

Daí você executa esse programa com o system("arquivo.exe -parametro");

Esse "parametro" é lido no "arquivo".

Testa aí.

Postado

Não to conseguindo fazer funcionar...

Tenho que passar o parametro por referecia então, usando ponteiros?

O 'x' que eu disse ali não seria uma variavel tipo char, é um int mesmo.

Eu fiz assim:

(no programa principal)

int main () {

int y=1;

int *x, p=1;

x = &p; /*Pego o endereço de 'p'*/

printf ("\ny = %d, x = %d, *x = %d\n", y, x, *x); /*Imprimo y, x e *x, só pra */

system ("pause"); /*ver se os valores estão certos*/

y = system ("arquivo.exe -*x"); /*Quero passar o valor de 'p' pro arquivo.exe*/

printf ("\n%d\n", y); /*Imprimo o valor retornado de arquivo.exe*/

system ("pause");

return (0);

}

(no programa arquivo)

int main (int *x) {

printf ("*x = %d", *x); /*Pra ver qual foi o valor passado pelo programa principal*/

system ("pause");

if (*x == 1) { /*se *x (ou seja, 'p') = 1, quero retornar 5*/

return (5);

}

else {

return (0); /*Se nao retorno zero mesmo, mas claro que nao quero entrar*/

} /*nessa parte do codigo, porque quero 'p'=1*/

}

É desse jeito que faz?

Esses sao só dois programinhas de exemplo, mas nao to conseguindo passar o valor '*x' ou 'p' pro "arquivo.exe", ele compila, mas na hora de rodar diz que o programa executou uma operação ilegal e tem que ser fechado.

Postado

Mano, assim como o Trevas Arcanas postou, você terá que passar os parametros na mesma string que você usa para chamar o programa, exemplo: system("tst.exe parametro_1 parametro_2). Porém no programa que será chamado você declarou a main como int main (int *x), assim não funcionará... A main deve ser declada assim: int main(int argc, char * argv[]), assim você conseguirá acessar os parametros numa boa.O parametro argc guarda um valor inteiro que representa o número de parametros passados para o programa, e argv[] é o vetor que guarda os parametros, argv[0] é o nome do programa, argv[1] é o primeiro parametro, etc...

Lembrando que os parametros são passados como strings, e se você quiser um inteiro tera que fazer a conversão.

Um exemplo de um programa que chama outro programa para calcular o quadrado de um número.Testado no DevC++.

Principal :


#include <iostream>
int main(void)
{
int num;
char chamada[15],numero[5];
std::cout<<"Entre com o n\xA3mero : ";
std::cin>>num;
itoa(num,numero,10);
strcpy(chamada,"tst ");
strcat(chamada,numero);
std::cout<<system(chamada)<<"\n"<<"\n";
system("pause >nul");
return 0;
}

O programa que será chamado, fará o calculo e retornará o valor :


#include <iostream>
int main(int argc, char * argv[])
{
int x = 0;
x = atoi(argv[1]);
return (x * x);
}

Qualquer dúvida,posta aí...

Postado

Está funcionando!

Obrigado a todos pelas respostas!

Agora entendi bem como funciona, e vou fazer mais uns testes aqui.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...