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

[SOLUCIONADO] Copiar array cadena caracteres

Estas en el tema de Copiar array cadena caracteres en el foro de C/C++ en Foros del Web. Hola a todos, Estoy intentando crear una función que reciba un array de nombres y esta los copie a una variable de la clase pero ...
  #1 (permalink)  
Antiguo 10/03/2015, 05:07
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Copiar array cadena caracteres

Hola a todos,

Estoy intentando crear una función que reciba un array de nombres y esta los copie a una variable de la clase pero no consigo iniciar el array correctamente y no se como hacerlo. Esta es la idea que tenia:

.h
Código:
char * files[];
.cpp
Código:
void setFiles( char *files[], int numFiles ) 
{
    //iniciar this->files con el numero de ficheros
  this->files = new char * [numFiles]; //esto no compila
  for ( int i = 0; i < numFiles; i++)
  {
     this->files[i] = (char*)malloc(strlen(files[i])*sizeof(char));
     strcpy( this->files, files[i] );
  }
}

Necesito tratar las cadenas como char* y no como string porque la plataforma para la que programo esta limitada.

Gracias por la ayuda.

Un saludo,
Daniel.
  #2 (permalink)  
Antiguo 10/03/2015, 05:43
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Copiar array cadena caracteres

¿Es imprescindible que uses char*? Si no es así, prueba a usar la clase "string", te simplificará mucho la vida

¿Tienes prohibidos los contenedores? Si no es así, prueba a usar la clase "vector" para almacenar la lista de elementos. Igualmente, te simplificará mucho el código y la vida.

Y bueno, tratando tu problema:

¿Qué error te da?

Veo que usas "this", pero con tu código no queda claro que "setFiles" sea un método de una clase. Si esta función no pertenece a una clase, no puedes usar "this".

Y, ya puestos, ¿por qué en esa línea usas "new" y, un poco más abajo, "malloc"?? lo normal, si estás programando en C++, es que uses "new" y te olvides de malloc.

Ah si, se me olvidaba:

Código C++:
Ver original
  1. strlen(files[i])*sizeof(char)

Esa reserva de memoria está mal. strlen(files[i]) te devuelve el número de caracteres de files[i]... pero no cuenta el carácter de fin de cadena, '\0'. Tienes que sumar 1 al resultado para que puedas hacer la copia sin pisar memoria.


Un saludo
  #3 (permalink)  
Antiguo 10/03/2015, 07:53
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Copiar array cadena caracteres

Si, tiene que ser con char * y no puedo utilizar vector, setFiles esta dentro de la clase solo que no había copiado todo.

.h
Código:
#ifndef WINDOW_DIRECTORIES_h
#define WINDOW_DIRECTORIES_h

class WindowDirectories {
private:
	int numFiles;
	char *files[];

	
public:	
	void setFiles( char *files[], int numFiles );
};
#endif

.cpp
Código:
void WindowDirectories::setFiles( char *files[], int numFiles )
{
	this->files = new char * [numFiles]; //esto no compila
	for ( int i = 0; i < numFiles; i++)
	{
		this->files[i] = new char[strlen(files[i])+1];
		strcpy( this->files[i], files[i] );
	}
	this->numFiles = numFiles;
}
Utilizaba malloc porque no sabia como hacer esto con un new, lo he cambiado por:

Código:
this->files[i] = new char[strlen(files[i])+1];
		strcpy( this->files[i], files[i] );
El error del
Código:
this->files = new char * [numFiles];
es esthe:

Código:
In member function ‘void WindowDirectories::setFiles(char**, int)’:
error: expected type-specifier before ‘*’ token
error: incompatible types in assignment of ‘int**’ to ‘char* [0]’
error: expected `;' before ‘char’
El error lo da justo en la linea del new

Código:
this->files = new char * [numFiles];
Gracias.
Un saludo.
  #4 (permalink)  
Antiguo 10/03/2015, 08:02
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Copiar array cadena caracteres

Lo he resuelto cambiando la variable
Código:
char *files[];
por
Código:
char **files;
Código:
void WindowDirectories::setFiles( char **files, int numFiles )
{
	this->files = new char * [numFiles];
	for ( int i = 0; i < numFiles; i++)
	{
		this->files[i] = new char[strlen(files[i])+1];
		strcpy( this->files[i], files[i] );
	}
}

Etiquetas: cadena, caracteres, char, int, numero
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 22:21.