System con parámetros

Pili
11 de Diciembre del 2004
Hola
Necesito ejecutar un programa dentro de otro en C++.
Lo hago de la siguiente forma
system("C:\convert.exe a.bmp a.jpg");

Esto funciona, pero si por ejemplo kiero pasarle los nombres de los archivos como variables, no me sale como hacerlo. Me podeis decir en que estoy fallando?

char h[2] = "a";
h[2] = '';
char c[5] = ".bmp";
c [5]= '';

strcat(h,c);

char d[2] = "a";
d[2] = '';
char j[5] = ".jpg";
j [5]= '';

strcat(d,j);

char comando[100]="C:\convert.exe ";

strcat(comando,h);
strcat(comando," ");
strcat(comando,d);

system(comando);

A ver si alguien me puede ayudar!

GRacias

Pili

helldaga
11 de Diciembre del 2004
El error se encuentra en la forma como asigna los valores a las cadenas de caracteres, resulta que en c++ no se le puede asignar valores a una cadena de caracteres por medio del signo igual " = ", a menos que se ubiese creado una clase y sobrecargado el operador de asignación.
Lo que si se puede hacer es asignar un solo caracter a una posicion de la cadena, por ejemplo donde usted hace char h[2] = "a"; esto lo que aria es asignar el caracter "a" a la posición 2 de la cadena "h", pero aun asi tiene un error y es que como lo que asigna es un caracter debería estar entre comillas sencillas, osea:
char h[2] = 'a';.

Bueno ahora a la solución:

*Primero, cuando vaya a colocar un valor por primera vez en una cadena utilice la funcion strcpy(destino,fuente); la cual copia la cadena fuente a la cadena de destino. Por ejemplo:

codigo incorrecto:

char c[5] = ".bmp";
c [5]= '';

Codigo correcto:

char c[5] ;
strcpy(c,".bmp");

*Segundo, usted tiene otro error y es que le concatena a una cadena otra de que excede la cantidad posiciones que tiene la cadena destino, ose cuando hace:

strcat(h,c);

Le esta concatenado c a h, pero resulta que h solo puede tener 2 caracteres y c tiene ya 4.

*Tercero, otro error se encuentra en la forma como usted interpreta la posiciones del arreglo de caracteres, por ejemplo usted tiene char h[2] = "a";, bueno ya dije el primer error que tiene esta expresión, pero otro es que usted tiene un arreglo de 2 dimensiones y usted esta accediendo a la posición 2, en c++ se debe tener presente que las posiciones de los arreglos empiezan en cero y terminan en n-1, osea la posicion 2 de este arreglo sería h[1], y a primera h[0].

Nota: cuando usted asigne cadenas utilizando strcpy(); no es necesarío que coloque el caracter nulo al final de cada cadena ya que la función lo hace. SUERTE.

Pili
11 de Diciembre del 2004
Muxas Gracias!!!!

Por fin funciona :p