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 :(
char nombre[8]; // 8 caracteres + 1 null char
Y...
String nombre[7];
...crea un array unidimensional/vector de 8 strings.
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
¡¡CUIDADO!!
Las strings en realidad son un vector de tamaño variable, similar al que haces cuando usas
(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
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)...
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.
Gracias por las aclaraciones...
Se puede escribir una cadena con fwrite,fread, como datos binarios(no ASCII)??
Cuando tenga un tiempo haré pruebas, ;)
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.
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í...
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.
Gracias por tu aclaraciones, eso me da confianza.
con gusto empezare a probar ^_^