Foros del Web » Programación para mayores de 30 ;) » C/C++ »

crear un vector de argumentos

Estas en el tema de crear un vector de argumentos en el foro de C/C++ en Foros del Web. Hola! En una función que estoy utilizando debo pasar un vector de argumento del tipo char **argv. He trabajado con vectores y memoriadinámica, pero aquí ...
  #1 (permalink)  
Antiguo 14/07/2006, 15:36
 
Fecha de Ingreso: septiembre-2003
Mensajes: 79
Antigüedad: 20 años, 8 meses
Puntos: 0
crear un vector de argumentos

Hola!
En una función que estoy utilizando debo pasar un vector de argumento del tipo char **argv. He trabajado con vectores y memoriadinámica, pero aquí me he quedado atascado.
tengo que crear un vector con cuatro argumentos cada uno de los valores son números.
El vector debe ser de este tipo
char *argv[4];
Partiendo de aquí como puedo asignarle los valores de las variables enteras
Fila,Columna,....

Saludos
  #2 (permalink)  
Antiguo 14/07/2006, 17:26
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 1 mes
Puntos: 2
si es obligatorio usar este vector char*[], lo indicado es hacerlo como se hace en main,

en uno de los indices de este vector guarda la direccion del puntero al vectro de 2 dimenciones ya despues podras capturar esta direccion dentro de la funcion que la utilize.


ejemplo:

char* argv[4];

int vector[2][2]; un vector de 2 filas y 2 columnas.

sprintf(argv[0], "%P", vector);


para leeerlo usarias;

int** vetorcpia;

sscanf(argv[0], "%P", vectorcpia);

supongo que funcionara, pero la verdad es una forma muy rrara de manejar argumentos para una funcion, sobre todo si esta no es main.

Saludos.
  #3 (permalink)  
Antiguo 14/07/2006, 18:05
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años
Puntos: 0
La declaracion char **argv define un apuntador a un apuntador a un caracter; generalmente este caracter es el comienzo de una cadena, por lo que esta declaracion seria un apuntador a una cadena. Por otra parte, char *argv[4] define un arreglo de cuatro apuntadores a caracteres (o a cadenas). Si tu quieres asignarle algo a la variable argv, tiene que ser un apuntador a un caracter o a una cadena ya definida en el programa. Por ejemplo
Código:
char **argv;
char cadena[] = "una cadena", *p = cadena;

argv = &p;
printf ("%s\n", *argv);
o
Código:
char *argv[4];
char cadena[] = "una cadena";

argv[2] = &cadena;
printf ("%s\n", argv[2]);
Puedes definir un arreglo de cadenas e inicializarlo sin especificar su dimension como en
Código:
char *argv[] = {
   "Primer cadena",
   "Segunda cadena",
   "Tercer cadena",
   "Cuarta cadena",
};
int i;

for (i = 0; i < sizeof (argv) / sizeof (char *); i++)
   printf ("%s\n", argv[i]);
Pero todo es con caracteres o cadenas de caracteres. Asi que lo que mencionas de asignarle valores enteros a argv no tiene sentido.
  #4 (permalink)  
Antiguo 15/07/2006, 17:09
 
Fecha de Ingreso: septiembre-2003
Mensajes: 79
Antigüedad: 20 años, 8 meses
Puntos: 0
Les comento con mayor detalle el problema con el que me he encontrado.
Estoy trabajando en Linux con c++ y el entorno PVM.
Para que el proceso padre pueda crear un proceso hijo debe llamar la función pvm_spawn. Uno de los parámetros que necesita esta función es un vector de argumento para pasárselos al proceso hijo.(vendría a "simular" desde línea de comando la ejecución del proceso_hijo 12 30 15 60)
El proceso padre debe pasarle al hijo cuatro valores, estos se obtienen en tiempo de ejecución de forma dinámica con lo que NO puedo hacer
char *argv[4]={"12","30","15","60"} (de forma estática)

Los valores que debería contener son los de las variables entera
_valor1=12
_valor2=30
_valor3=15
_valor4=60
char *argv[4];
De alguna forma cada elemento del vector debe apuntar al valor de cada variable, pero de tipo char*
Les pongo la declaración de la función pvm_spawn y la url donde encontrar su funcionamiento. Por si les puede servir de ayuda
int numt = pvm_spawn( char *task, char **argv, int flag, char *where, int ntask, int *tids )
http://www.csm.ornl.gov/pvm/man/pvm_spawn.3PVM.html
Saludos
  #5 (permalink)  
Antiguo 17/07/2006, 07:08
 
Fecha de Ingreso: septiembre-2003
Mensajes: 79
Antigüedad: 20 años, 8 meses
Puntos: 0
He probado la función sprintf y resuelve el problema planteado.
Gracias
Saludos
Daly
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.