elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al definir array char en DEV-CPP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al definir array char en DEV-CPP  (Leído 4,149 veces)
DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Error al definir array char en DEV-CPP
« en: 25 Febrero 2012, 05:14 am »

Saludos gente, como andan, perdón por no pasar pero estoy muy ocupado, es más casi ni he programado últimamente, y al volver me encontré con una laguna:

¿Cómo hago para pasar el valor de un argumento pasado al programa a un array char (string)?

Utilizo el compilador DEV-CPP 4.9.9.2 (Me ví obligado a hacerlo :'()

No recuerdo si era con un puntero o como era, era algo parecido a pasar un pointer a un valor de una estructura (creo).

Dejo el source, no hay apuro puesto que sólo es algo que se me dío por hacer, pero no me acuerdo :$

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. void Cls();
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.  
  11.    int i, size;
  12.  
  13.    size = ((sizeof argv[1]) - 1);
  14.  
  15.    char current[size] = argv[1];
  16.  
  17.    i = 0;
  18.    // Animación del texto...
  19.    loop:
  20.    Cls(); // Para no utilizar system("Cls");
  21.    current[size] = current [0];
  22.    for ( i = 0; i < size; i++ )
  23.                               {
  24.                               cout << current[i];
  25.                               if (i != size)
  26.                                            { current[i]= current[i+1]; }
  27.                               }
  28.  
  29.    goto loop;
  30.  
  31. return 0; // En realidad nunca termina (por ahora)
  32. }
  33.  
  34. void Cls()
  35.  
  36. {
  37.     int i;
  38.     i = 0;
  39.     for ( i = 0; i < 2000; i++ )
  40.                                {cout << " ";}
  41. }
  42.  

Desde ya gracias y saludos a todos!

PD: Si saben de alguna alternativa más veloz y portable a mi void Cls(); les estaré doblemente agradecido, como siempre las críticas son bienvenidas, bytes!


En línea

.: DA KILLER :.


x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Error al definir array char en DEV-CPP
« Respuesta #1 en: 25 Febrero 2012, 05:37 am »

creo entender :P pasas un argumento a un programa luego lo quieres obtener, pues veo que vas bien
solo que para copiarlo tengo entendido que puede usar la funcion memcpy para copiar los datos


En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Error al definir array char en DEV-CPP
« Respuesta #2 en: 25 Febrero 2012, 15:44 pm »

Recuerda que en C/C++ no se pueden asignar arreglos, es decir, no puedes hacer esto arreglo1 = arreglo2 (NO COMPILA) en este caso deberías usar memcpy como te habían mencionado. Otra cosa creo que sizeof() lo estás usando creyendo que hace lo mismo que strlen(). sizeof() no devuelve la longitud de una cadena, devuelve el tamaño en bytes de un tipo específico de datos.

PD: No se por qué estás usando "C++" si lo único que usas es cout. Yo en tu caso utilizaría C.
En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Error al definir array char en DEV-CPP
« Respuesta #3 en: 25 Febrero 2012, 21:52 pm »

Hola

Otra cosa SÚPER IMPORTANTE NO UTILIZAR GOTO.

Casi se me caen los ojos.

Y tampoco está bien hacer esto:

Código
  1. int size;
  2. size = ((sizeof argv[1]) - 1);
  3. char current[size] = argv[1];
  4.  

es un fallo común, pero no está bien reservar memoria de esa forma en tiempo de ejecución. Para hacerlo de esa forma utiliza

Código
  1. int size;
  2. char *current;
  3. size = ((sizeof argv[1]) - 1);
  4. current = new char[size];
  5.  

Saludos
En línea

Breakbeat como forma de vida
armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: Error al definir array char en DEV-CPP
« Respuesta #4 en: 25 Febrero 2012, 23:18 pm »

Para limpiar la pantalla puedes hacer algo mas o menos asi:
Código
  1. #ifdef __WIN32__ || __MSDOS__
  2. system("cls");
  3. #endif
  4. #ifdef __unix__
  5. system("clear");
  6. #endif
Claro que no sera tan portable, pero __unix__ abarca muchos sistemas operativos por lo que puede servir.
Otra cosa SÚPER IMPORTANTE NO UTILIZAR GOTO.
goto es un problema solo cuando es mal utilizado, puede que muchas veces hayan opciones mucho mas eficientes (while, for, do...while) pero en ciertos casos hay que utilizarlo.
Pero en este caso no lo veo necesario xd. Si por ahora quiere que no se detenga nunca puede hacer esto:
Código
  1.    while(1) {
  2.        Cls(); // Para no utilizar system("Cls");
  3.        current[size] = current [0];
  4.        for ( i = 0; i < size; i++ ) {
  5.            cout << current[i];
  6.            if (i != size) current[i]= current[i+1];
  7.        }
Simplemente espera a que 1 sea igual a 0 lo cual jamas ocurrira ;D O tambien se puede hacer:
Código
  1.    for(;;) {
  2.        Cls(); // Para no utilizar system("Cls");
  3.        current[size] = current [0];
  4.        for ( i = 0; i < size; i++ ) {
  5.            cout << current[i];
  6.            if (i != size) current[i]= current[i+1];
  7.        }
Punto importante: si un while, for, o lo que sea solo contiene una instruccion, mejor que no pongas los parentesis.
Ejemplo:
Código
  1. if(a<b) {
  2.    std::cout << "Hola!" << std::endl;
  3. } //Esto queda un poco raro y aveces ilegible, ademas de usar espacio de mas
  4. if(a<b)
  5.    std::cout << "Hola!" << std::endl;
  6. //ocupa mucho menos espacio
En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Re: Error al definir array char en DEV-CPP
« Respuesta #5 en: 27 Febrero 2012, 01:44 am »

Primero que nada gracias a todos por sus respuestas.

PD: No se por qué estás usando "C++" si lo único que usas es cout. Yo en tu caso utilizaría C.

Porque tengo entendido que C++ es mejor para lo que es OOP, como sólo conozco las bases (iteración, selección, asignación, &c.) aún no me hace mucha diferencia, pero voy a tenerlo en cuenta.

Otra cosa SÚPER IMPORTANTE NO UTILIZAR GOTO.

A muchos no les gusta el goto y no encuentro una razón válida para ello, se me quedó pegado del batch xD

Código
  1. int size;
  2. char *current;
  3. size = ((sizeof argv[1]) - 1);
  4. current = new char[size];
  5.  

Sabía que por ahí era la cosa xD, muchísimas gracias! ;-)

Gracias armizh, pero no tengo claro todavía como funcionan esas definiciones, lo intentaré, tampoco sabía lo de el while(1) y por más que sea una única línea en los bucles for utilizo las llaves porque normalmente le voy agregando más código, y me parece más estructurado.

En fin gracias a todos y pueden cerrar el post ;)
En línea

.: DA KILLER :.


satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Error al definir array char en DEV-CPP
« Respuesta #6 en: 27 Febrero 2012, 13:39 pm »

Hola

goto es un problema solo cuando es mal utilizado, puede que muchas veces hayan opciones mucho mas eficientes (while, for, do...while) pero en ciertos casos hay que utilizarlo.

Estás equivocado, C/C++ son lenguajes de programación estructurados y el GOTO rompe la programación estructurada.


Cita de: Wikipedia
C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos).


Programación estructurada
Cita de: Wikipedia

La programación estructurada es una técnica para escribir programas (programación de computadora) de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

Saludos
En línea

Breakbeat como forma de vida
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ERROR excepcion: char* = char* + n « 1 2 »
Programación C/C++
x64core 10 6,074 Último mensaje 21 Enero 2012, 20:20 pm
por Eternal Idol
Funcion que retorne char array? « 1 2 »
Programación C/C++
juancaa 13 18,058 Último mensaje 19 Julio 2012, 16:23 pm
por rir3760
substring en array char « 1 2 »
Programación C/C++
soyloqbuskas 13 7,599 Último mensaje 22 Septiembre 2012, 00:33 am
por rir3760
No puedo asignar un char a un array de dos dimensiones
Programación C/C++
SCUMM 5 3,349 Último mensaje 12 Febrero 2014, 16:24 pm
por eferion
Duda con Array c++ 2 Dimensiones y vector de profundiad char nombre[X][Y]
Programación C/C++
jenniferpd 2 2,841 Último mensaje 28 Septiembre 2014, 04:07 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines