[C con Clase] Pregunta tonta de char *algo.

Joaquin Fernandez joaquinfq en gmail.com
Vie Mar 16 19:44:49 CET 2007


> int len=strlen(file_name);
> for (int i=0; i<len; i++)
> 
> y así haría el ciclo, con esto, aunque estaría usando un poco mas de memoria (el tamaño de un entero), creo que sería mas rapido en tiempo de ejecución, ya que con la otra forma se está ejecutando varias veces la función de obtención de la longitud de la cadena (que según entiendo se hace con otro ciclo), mientras que así solo se ejecuta una vez. (esto es solo una opinión, espero que ayude un poco), hasta luego.

En realidad esto también sería un desperdicio, sobre todo porque se va a usar i dentro del bucle
para acceder al contenido de la cadena file_name. Dado la variable file_name es una cadena C debe
terminar en un nulo, por lo que generalmente se hace:

for (char *c=file_name; *c; c++) {
...
}


> char *file_name;
> file_name="hola_0.000_.dat";

Esto es un error. Debes poner todo en una línea.

char *file_name = "hola_0.000_.dat";

o ponerlo así:

char *file_name;
file_name = new char[16]; // Longitud del nombre del archivo + 1
strcpy(file_name, "hola_0.000_.dat");
// Instruciones de tu programa
...
delete[] file_name;

pero es demasiado trabajo comparado con la primera manera.

Por otro lado, para cambiar el valor de los 0's por otros números debes usar '1' y no 0x1. '1' tiene
un valor de 49 mientras que 0x1 vale 1. Usando el ejemplo del bucle anterior, sería tan simple como:

for (char *c=file_name; *c; c++) {
  if (*c == '0') *c = '1';
}

Eso te reemplaza todos los '0' por '1'.

Saludos

Joaquín




Más información sobre la lista de distribución Cconclase