Autor Tema: Ayuda, declarar cadena(string) con longitud determinada  (Leído 432 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alicesimu

  • Sr. Member
  • ****
  • Mensajes: 256
  • Karma: 2
  • Sexo: Femenino
    • Ver Perfil
Ayuda, declarar cadena(string) con longitud determinada
« en: Diciembre 02, 2016, 06:22:01 am »
Buenas

Programando... Di por echo que me aceptaría cadenas con longitud máxima determinada por ejemplo
String nombre[7];

Aquí solo puede almacenar 8 caracteres.

La utilidad es para ahorrar memoria RAM y también de fichero de almacenamiento usando fopen...

Pero no lo permite compilar esto :(

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12459
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #1 en: Diciembre 02, 2016, 06:26:19 am »
char nombre[8]; // 8 caracteres + 1 null char
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado panreyes

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 2009
  • Karma: 64
  • Sexo: Masculino
    • Ver Perfil
    • panreyes.com
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #2 en: Diciembre 02, 2016, 07:10:10 am »
Y...

String nombre[7];

...crea un array unidimensional/vector de 8 strings.

Desconectado alicesimu

  • Sr. Member
  • ****
  • Mensajes: 256
  • Karma: 2
  • Sexo: Femenino
    • Ver Perfil
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #3 en: Diciembre 02, 2016, 07:52:20 am »
Graciaaasss !! Desconocía el tipo char

Que bien que se permitan string multidimensionales!! Eso me recuerda las tablas
Byte Nombre[3][7] contendría cadenas 4 x 8 caracteres

Desconectado Drumpi

  • Hero Member
  • *****
  • Mensajes: 6094
  • Karma: 156
  • Sexo: Masculino
  • Odio el periodo "entre proyectos"
    • Ver Perfil
    • La web de Drumpi
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #4 en: Diciembre 03, 2016, 09:53:50 am »
¡¡CUIDADO!!
Las strings en realidad son un vector de tamaño variable, similar al que haces cuando usas
Código: [Seleccionar]
(char) palabra = alloc (n * sizeof(char));

Pero la diferencia es que su tamaño cambia cada vez que modificas la string, por lo que un array de STRING está desaconsejado, así como su uso en tipos definidos por el usuarios y estructuras (salvo que las declares como último campo, si las declaras al principio o en medio es posible que puedas sufrir desbordamientos de memoria, pero no si están al final, lo he comprobado).
La única forma segura que conozco de usar una lista de STRINGs es crear una lista enlazada de nodos que contengan una única string cada uno.

Si alguien se quiere ahorrar la molestia de tener que programarlo, puede usar el que me hice yo:
http://forum.bennugd.org/index.php?topic=2122.0
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Desconectado alicesimu

  • Sr. Member
  • ****
  • Mensajes: 256
  • Karma: 2
  • Sexo: Femenino
    • Ver Perfil
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #5 en: Diciembre 03, 2016, 11:36:12 am »
solo me interesa declarar un STRING de una longitud determinada. ya probare eso de char....

tambien poderlos usar, con FOPEN, FPUTS,FGETS. es la intencion.

Creia que cuando se declara un dato STRING por default, son 255 caracteres(como lo hacia div2)...

Desconectado Drumpi

  • Hero Member
  • *****
  • Mensajes: 6094
  • Karma: 156
  • Sexo: Masculino
  • Odio el periodo "entre proyectos"
    • Ver Perfil
    • La web de Drumpi
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #6 en: Diciembre 03, 2016, 06:04:07 pm »
Lo más seguro para longitud determinada son los CHAR, sin ninguna duda. Pero tencuidado con FPUTS y FGETS, no sé si hará conversión implícita a STRING y te lo dejará en tamaño variable (reducirías espacio en el fichero, y puedes leerlo sin ninguna pega, pero no van a tener exactamente el tamaño que tu le digas sino el tamaño del texto mas en terminador de linea, que ya no recuerdo si sólo era el fin de linea solo o también incorporaba el retorno de carro en entornos Windows). Compruébalo por si acaso con un editor hexadecimal.

No estoy seguro, pero creo que DIV tenía 255 caracteres como máximo (o me suena que 300 y pico). Ignoro si también era la memoria usada, si era fija o dinámica.
Lo que sí te aseguro es que Bennu (y Fenix, porque viene de allí) gestiona su tamaño de forma dinámica por lo dicho, que he tenido algun desbordamiento de pila que se ha arreglado al cambiarlo de posición en la declaración de TYPE. Aun así, son MUY útiles.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Desconectado alicesimu

  • Sr. Member
  • ****
  • Mensajes: 256
  • Karma: 2
  • Sexo: Femenino
    • Ver Perfil
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #7 en: Diciembre 04, 2016, 02:25:37 am »
Gracias por las aclaraciones...

Se puede escribir una cadena con fwrite,fread, como datos binarios(no ASCII)??

Cuando tenga un tiempo haré pruebas, ;)

Desconectado Drumpi

  • Hero Member
  • *****
  • Mensajes: 6094
  • Karma: 156
  • Sexo: Masculino
  • Odio el periodo "entre proyectos"
    • Ver Perfil
    • La web de Drumpi
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #8 en: Diciembre 04, 2016, 12:47:19 pm »
Emmm, no, porque si usas datos binarios, el valor de cada caracter es su valor ASCII, por lo que cualquier cadena que añadas, bien con FPUTS o con FWRITE, al final, vas a poder leerlo como ASCII en cualquier editor de texto o hexadecimal :D
A menos que uses una codificación propia, todas las cadenas de texto se ven como texto, siempre, en cualquier lenguaje.

Ejemplo: "A" se guarda como un byte de valor 65 (h41). Si lo abres con un editor hexadecimal, aparece con su valor hexadecimal, pero en la columna ASCII se verá la A. Si lo abres con el notepad, también verás una A.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Desconectado alicesimu

  • Sr. Member
  • ****
  • Mensajes: 256
  • Karma: 2
  • Sexo: Femenino
    • Ver Perfil
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #9 en: Diciembre 04, 2016, 01:37:40 pm »
Aaah vale, si eso me lo encontrado en algunos ficheros de datos.

La diferencia del sistema fwrite al fputs, que uno no añade el símbolo de salto de línea, y el otro si.

Bueno, algo así...

Desconectado Drumpi

  • Hero Member
  • *****
  • Mensajes: 6094
  • Karma: 156
  • Sexo: Masculino
  • Odio el periodo "entre proyectos"
    • Ver Perfil
    • La web de Drumpi
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #10 en: Diciembre 05, 2016, 10:12:00 am »
FPUTS escribe una cadena y añade el símbolo de fin de linea (y no sé si retorno de carro; tiempo ha, dependiendo de si era versión Windows o Linux lo hacía, creo que ya no, sólo fin de linea Linux style).
FWRITE escribe el contenido de una variable exactamente igual que está en memoria, con el mismo orden, mismo tamaño de bytes y mismo contenido. Nunca he usado FWRITE con una STRING, siempre con bytes, words, ints, algún char, y tipos propios. Alguna vez he metido alguna string en el fichero binario, pero siempre usando FPUTS/FGETS.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Desconectado alicesimu

  • Sr. Member
  • ****
  • Mensajes: 256
  • Karma: 2
  • Sexo: Femenino
    • Ver Perfil
Re:Ayuda, declarar cadena(string) con longitud determinada
« Respuesta #11 en: Diciembre 05, 2016, 10:29:00 am »
Gracias por tu aclaraciones, eso me da confianza.
con gusto empezare a probar ^_^