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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 86
21  Programación / Java / Re: [JAXB] Generar xsd mediante schemagen en: 19 Diciembre 2020, 00:50 am
El el mismo directorio cual? original del proyecto? o en otra carpeta ?
Para simplificarlo y no tener que lidiar con los paquetes originales del proyecto lo que hice fue copiar todos los .java en un directorio llamémoslo CodigoFuente/ y modifiqué la sentencia package y los imports de los .java (es decir, los eliminé). El directorio en el que estaba trabajando tenía la siguiente estructura:
Código:
CodigoFuente/
|_ ConjuntoVehiculos.java
|_ Vehiculo.java
|_ Coche.java
|_ Furgoneta.java
Entonces desde línea de comandos al ejecutar
Código:
C:\...\CodigoFuente>schemagen -d . -cp *.java -encoding utf-8
me generaba el fichero schema1.xsd en el directorio CodigoFuente/ pero salía en el cmd el error que cité en el otro mensaje de que no se reconocía el símbolo Coche.class y en el xsd me incluía correctamente todas las clases (como xs:element) menos la clase Coche que no aparecía.
Lo que me parece raro pues la clase Coche.java tiene prácticamente la misma estructura que Furgoneta.java (solo cambia algún atributo) y las anotaciones de ambas clases también son iguales. Me dio que pensar que quizás al pasar como argumento *.java se estuviesen compilando los ficheros en este orden:
1. Vehiculo.java -> Vehiculo.class
2. Furgoneta.java -> Furgoneta.class
3. ConjuntoVehiculos.java -> ConjuntoVehiculos.class
4. Coche.java -> Coche.class
Y quizás por eso al compilar ConjuntoVehiculos.java no se reconoce el símbolo Coche.class (porque todavía no existe).

Tal cual doc asi mismo, es, cuando compila los .java estos pasan a ser .class que sera usados luego para crear los .xsd
Respecto a esto, noté que aunque schemagen compile los .java en .class, estos no aparecen en el directorio en el que se está trabajando (CodigoFuente/ en este supuesto). Por eso intenté compilarlos yo y tras varios intentos vi que la única forma en que funcionaba es teniendo todos los ficheros compilados ya y pasar a schemagen únicamente el .java que contiene a los demás. Es decir, teniendo:
Código:
CodigoFuente/
|_ ConjuntoVehiculos.java
|_ ConjuntoVehiculos.class
|_ Vehiculo.java
|_ Vehiculo.class
|_ Coche.java
|_ Coche.class
|_ Furgoneta.java
|_ Furgoneta.class
Y ejecutando:
Código:
C:\...\CodigoFuente>schemagen -d . -cp ConjuntoVehiculos.java -encoding utf-8
Por lo tanto no entiendo cuándo es necesario compilar los .java a .class antes de ejecutar schemagen y qué argumentos hay que pasarle a schemagen con la opción -cp. :huh:

PD: Gracias por responder. Siendo un tema tan raro ya pensaba que no iba a tener respuestas.  :-X
22  Programación / Java / [JAXB] Generar xsd mediante schemagen en: 18 Diciembre 2020, 12:53 pm
He tenido problemas para generar un schema xsd a partir de unas clases .java mediante el comando schemagen.

Tenía las siguientes clases (todas ellas en el mismo directorio . para simplificar):
Código:
ConjuntoVehiculos
Vehiculo
Furgoneta extends Vehiculo
Coche extends Vehiculo
Entonces al ejecutar:
Código:
schemagen -d . -cp *.java -encoding utf-8
Se me generaba el schema xsd pero me aparecía el siguiente mensaje y no se incluía el elemento Coche en el schema.
Citar
ConjuntoVehiculos.java:14: error: cannot find symbol
                        @XmlElementRef(name = "Coche", type = Coche.class),
                                                                                             ^
    symbol:   class Coche
    location: class ConjuntoVehiculos
Esa anotación @XmlElementRef la tengo junto a otras dos que hacen referencia a Vehiculo y Furgoneta y estas otras no producen ningún problema. He comprobado los nombres y está todo bien escrito.

He hecho varias pruebas incluyendo los ficheros .java uno por uno y compilándolos primero (aunque por lo que he visto, schemagen debe llamar internamente a javac para compilar los ficheros fuente) pero obtenía más errores y no me generaba el schema.

Al final después de mucho probar me ha dado por compilar los ficheros .java (en el mismo directorio) y ejecutar:
Código:
schemagen -d . -cp . ConjuntoVehiculos.java -encoding utf-8
Con esto sí he conseguido generar el schema correctamente, sin errores e incluyendo todos los elementos pero no entiendo por qué ha funcionado. Es decir, no entiendo cómo funciona schemagen. He buscado en muchas webs y en todas aparece un ejemplo sencillo que funciona con el primer comando que he probado y no se explica nada más.

Espero que alguien conozca esta herramienta y pueda ayudarme. :-X

PD: Estoy utilizando schemagen 3.0.0 (recientemente descargado junto con las otras herramientas de JAXB).
23  Sistemas Operativos / GNU/Linux / Re: [CURSO GRATIS] Dominar Linux y su Consola en: 15 Diciembre 2020, 12:40 pm
Me parece un poco pretencioso, no crees? Y lo digo desde la crítica constructiva, no se me malentienda.
Para todo aquel que le interese conocer a fondo como manejar y dominar el sistema operativo LINUX,
He entrado a ver los vídeos para conocer a fondo Linux y solo he visto un poco de introducción, una instalación (en máquina virtual) y varios comandos básicos de consola.

les dejo este curso completisimo y GRATIS.
No puede ser un curso muy completo cuando se llama "Dominar Linux y su Consola" y de 7 vídeos que tiene el curso y una duración de ~1 hora, solo 3 de ellos (~30 minutos) tratan realmente sobre la consola y muestran comandos muy sencillos y básicos.

Un nombre más correcto me parece: Introducción a GNU/Linux.
No estoy diciendo que el curso sea malo. Pero el título debería ser acorde a sus contenidos y una explicación de lo que es GNU/Linux, una introducción a sus características y varios comandos básicos me parece demasiado presuntuoso como para decir que tras ver esos vídeos ya domino Linux a fondo.
El clickbait está muy bien para conseguir que entre más gente al curso pero no va a conseguir que se queden. Hay que ser fieles a la realidad y ese curso no es (al menos de momento) para personas con conocimientos avanzados de Linux sino para gente que está empezando. Habrá quienes estén empezando y no entren porque el título les parezca demasiado avanzado y otros que tengan más nivel, entren y no se queden porque los contenidos no son lo que el título promete.

Suerte  :-X
24  Sistemas Operativos / Windows / Re: Optimizar windows 10 en: 15 Diciembre 2020, 12:24 pm
Para equipos tan limitados yo siempre he recomendado distribuciones GNU/Linux. Aunque hayas cambiado el disco duro por un SSD lo cual se notará (aunque 120 GB tampoco dan para mucho), 2 GB de RAM me parecen muy muy limitados para un Windows 10.
Claro está que es importante conocer el uso que se le va a dar al ordenador pero siendo tan antiguo no creo que se vaya a usar para edición de vídeos o cosas por el estilo. Si el uso que se le va a dar es el típico de cualquier usuario promedio (internet, editor de texto, reproductor multimedia,...) un sistema Linux cumplirá mucho mejor que Windows.

Si por lo que sea quieres o necesitas seguir utilizando Windows, no puedo ayudarte porque desconozco como optimizarlo pero sí te digo que yo he instalado Linux en sistemas con más recursos que ese y el cambio ha sido muy satisfactorio.

Suerte  :-X
25  Programación / Programación C/C++ / Re: Necesito ayuda para poner una fecha limite o fecha final a mi programa para mi bloc de notas en: 15 Diciembre 2020, 08:15 am
Tienes que concretar un poco más en lo que necesitas. No se sabe dónde o para qué tienes que agregar una fecha límite.

Aparte te eso, algunas recomendaciones:
  • No utilizar variables globales (opc). No la necesitas para nada fuera del main() y aunque así fuese, para eso existen los parámetros en las funciones: para pasar las variables entre ellas.
  • Utilizar constantes para dar un nombre a los valores que hay sueltos por el programa. Por ejemplo:
Código
  1. #define SIZE_NOMBRE 30
  2. #define SIZE_CADENA 100
  3. #define SLEEP_TIME 3
  4. //...
Y así puedes cambiar los valores en un único sitio (al principio del programa) y que se modifique en todos los sitios donde se usa.

  • Poner hasta 2 instrucciones en una línea se puede llegar a dar de paso si es algo muy sistemático y sencillo de ver. Mezclar 3 o más instrucciones dificulta bastante su lectura (línea 61).
  • Utilizas muchas funciones diferentes para lo mismo. Para leer cadenas de texto (char[]) utiliza siempre fgets() ya sea desde un fichero o desde la entrada estándar. Lo único que tienes que cambiar es el último argumento con el nombre del fichero o con stdin para referirte a la entrada estándar.
Código
  1. char nombreBloc[SIZE_NOMBRE];
  2. printf("Introduce el nombre del bloc: ");
  3. fgets(nombreBloc, SIZE_NOMBRE, stdin);
Si utilizas scanf(), tal y como haces, el programa fallará si introduces un número de caracteres mayor a la longitud máxima permitida. Con fgets() evitas esta situación.

  • Relacionado con lo anterior, fflush(stdin) no es una forma correcta de usar la función fflush(). Esta fue diseñada para limpiar el buffer de salida (stdout), no el de entrada (stdin). Su comportamiento no está definido. Una forma de limpiar el buffer es utilizar getchar() que coge un caracter del buffer.
Seguido al ejemplo anterior de fgets(), si justo después incluyes estas líneas conseguirás, por una parte eliminar el salto de línea final de la cadena y por otra dejar el buffer limpio.
Código
  1. fgets(nombreBloc, SIZE_NOMBRE, stdin);
  2. if(nombreBloc[strlen(nombreBloc) - 1] == '\n') nombreBloc[strlen(nombreBloc) - 1] = '\0'; // si el salto de linea esta al final, lo sustituyes por el fin de cadena y ya sabes que no queda nada en el buffer
  3. else while(getchar() != '\n'); // si queda algo en el buffer (el salto de linea o caracteres que no cabian), entonces lo limpias
Igual que con la lectura de cadenas, no sigues un patrón claro de limpieza. A veces llamas a fflush(), otras veces no... Y luego está la función setbuf() que no sé si sabes exactamente lo que hace ya que es la primera vez que la veo en unos cuantos años.

  • feof() no debe utilizarse como condición de parada en la lectura de ficheros. Utiliza directamente el valor que devuelve fgets().
Código
  1. while(fgets(cadena, SIZE_CADENA, fichero))
  2.  printf("%s", cadena);

  • Por otro lado, en las dos últimas funciones compruebas si el fichero se ha abierto correctamente pero en la primera no. Qué pasa si no se puede crear el fichero?
  • Y en la última función, en vez de hacer la comprobación con un while() (que en la primera iteración no tienes nada en <cadena>), utiliza un do-while() que primero ejecuta el interior y después hace la comprobación.
Código
  1. // Esto puede ir como constante global o dentro de la propia funcion
  2. const char CADENA_FIN[] = "FIN";
  3.  
  4. char cadena[SIZE_CADENA];
  5. int continuar;
  6. do {
  7.  printf("Introduce una cadena: ");
  8.  fgets(cadena, SIZE_CADENA, stdin);
  9.  // Como he dicho antes, eliminas el salto de linea y limpias el buffer
  10.  if(cadena[strlen(cadena) - 1] == '\n') cadena[strlen(cadena) - 1] = '\0';
  11.  else while(getchar() != '\n');
  12.  // Ahora comparas la cadena
  13.  continuar = (strcmp(cadena, CADENA_FIN)); // Guardara 0 (que equivale a false) si son iguales y 1 o -1 (que equivale a true por ser distinto de 0) en otro caso. Asi no haces la comparacion 2 veces
  14.  if(continuar){
  15.    // No veo ninguna ventaja de usar fputs() en vez de fprintf()
  16.    fprintf(fichero, "%s\n", cadena);
  17.  }
  18. } while(continuar);

Dicho todo esto, espero que apliques los consejos aunque lo hagas a tu manera. Y especifica con más detalle el problema que tienes para poder ayudarte.

PD: Permíteme hacer esta mención:
Estoy igual ojala alguien ayude
Fíjate en la diferencia. Alex1209 ha abierto un tema con un poco de formalidad y siguiendo las normas y ha tenido más ayuda ya que si hubiese abierto x temas con títulos para nada descriptivos, sin aportar nada y solo pidiendo que le hagan la tarea. Y no ha tenido que pedir que sean serios... :silbar: :silbar:
26  Programación / Programación C/C++ / Re: Ayuda code blocks c+ ES FACIL AYUDA ? en: 15 Diciembre 2020, 07:23 am
Hacer un programa que obtenga el producto de varios números positivos, el programa termina al introducir un número negativo.

Alguna persona que no se burle y que pueda hacer eso se lo agradecería muchooo
Pides demasiado.
Me parece que te vas a tener que salvar las vacaciones tú solito... :silbar: :silbar:
Ah y si te sobra tiempo, siempre puedes leerte las reglas del foro donde dice claramente que no se hacen tareas.
Para que no pierdas tu valioso tiempo buscándolas: https://foro.elhacker.net/programacion_cc/reglas_del_subforo-t251603.0.html

Dicho esto, tema cerrado.
27  Programación / Programación C/C++ / Re: Nota par impar en: 14 Diciembre 2020, 20:50 pm
En primer lugar comentar que he borrado tu otro mensaje porque, como ya habrás visto, puedes modificar tu mensaje anterior para añadir lo que creas conveniente si nadie ha respondido aún.

Ahora el tema en cuestión: No vamos a darte el ejercicio solucionado si es lo que estás esperando y parece que así es... "tened en cuenta que no se puede realizar una división por cero." El que tiene que tener eso en cuenta eres tú, no nosotros.

Si ya tienes las notas (imagino que en un array) ahora lo que debes hacer es recorrer dicho array y comprobar si el número es par o impar mediante un condicional. Obviamente no tienes que comparar cada valor con todos los números pares/impares (porque son infinitos). Hay una expresión usando el operador de módulo (a % b) que devuelve el resto de dividir a entre b (claro que ambos deben ser números enteros). Dentro de esta comprobación tendrás que hacer lo que necesites (guardarlos, hacer cálculos con ellos,...).

Para más ayuda debes dejar tu código entre etiquetas de código GeSHi. Para seleccionarlas puedes ir al desplegable que dice "Código GeSHi" y seleccionar el lenguaje apropiado. Tu código debe quedar entre las dos etiquetas que aparecerán en el cuadro de texto y el resultado debe verse tal que así:
Código
  1. printf("Usando etiquetas de Codigo GeSHi\n");
(También puedes escribir las etiquetas manualmente)

PD: Código en C++ utilizando <stdio.h>... Hmm  :-\ Suena a una mezcla más habitual de lo que debería. ¿Qué te lleva a decir que el código es en C++? Aunque bueno, podré verlo si lo publicas en tu siguiente mensaje... :rolleyes:
28  Foros Generales / Dudas Generales / Re: [Debate] ¿Qué plataforma utilizar para publicar contenidos? (YouTube, Blogs,...) en: 12 Diciembre 2020, 23:32 pm
Videos sobre tecnología que vi en youtube este año: 20-50.
Entradas de blogs sobre tecnología que leí este año: 500-900.
Me he sentido muy identificado con esto  :xD
Cuando empecé a programar aprendía todo a base de vídeos por los motivos típicos: es más visual, vas viendo los cambios "en vivo", etc pero ahora realmente prefiero leer un blog porque los vídeos acostumbran a hacérseme demasiado lentos y siempre acabo saltando partes o aumentando la velocidad de reproducción.
Sé que no es lo habitual como dice #!drvy pero es mi caso y veo que el de más personas también.

A parte creo que en un escrito quedaría mejor tu contenido. No es lo mismo ver un código en pantalla que copiar y pegarlo de una web.

Supongo que podrías hacer las 2 cosas. Youtube más orientado a conceptos, explicar ideas, proyectos...
Y los blogs para el contenido extenso con código, citas, docu...
Teniendo en consideración las respuestas creo que me voy a decantar por empezar subiendo el contenido en forma de vídeo a Youtube y estudiaré algunas de las opciones de blogs mencionadas en el tema para publicar quizás algunos de los contenidos en texto.
Las opciones de Podcast y Newsletter de momento las dejaré aparcadas para más adelante aunque me parecen opciones interesantes.

¿Puede que el problema de fondo sea cómo conseguir seguidores?
No, lo cierto es que no he pensado mucho en ello. Esto lo quiero hacer porque me parece una forma interesante de seguir aprendiendo, hacer cosas nuevas, afrontar nuevos retos y no quedarse estancado; y no tanto por tener más o menos seguidores. Con algunas personas cercanas que me digan qué tal se ve desde fuera y me ayuden a ir mejorando me es suficiente.
Más que nada por eso abrí el tema. Porque en vez de utilizar el típico YouTube, quería saber si a lo mejor existía alguna plataforma que aunque fuese menos conocida, tuviese más soporte para este tipo de contenido.
29  Programación / Programación C/C++ / Re: codigo en c errores en: 12 Diciembre 2020, 10:56 am
Lo primero mencionar que el código debe ir entre etiquetas de Código GeSHi. Las puedes seleccionar mediante el desplegable que hay encima del cuadro de texto o escribiéndolas tú manualmente.

Veo bastantes cosas mejorables (algunos son errores y otros no pero convendría corregirlo también).
Te pondré un indicador según el mensaje: Consejo (no da errores pero es mejor cambiarlo) | Aviso (puede dar errores según el caso) | Error (esto no funciona bien)
Voy mencionando según vaya viendo cosas:
  • Consejo: Por convenio las estructuras se suelen definir en UpperCamelCase -> Traductor.
  • Consejo: No utilizar variables globales. Es mejor crear las variables en la función main() y usar parámetros para pasar los datos a otras funciones (cosa que haces).
  • Consejo: Las funciones por convenio en lowerCamelCase -> carga(), busquedaDicotomica(),...
  • Consejo: Al utilizar typedef para definir la struct, ya no es necesario que utilices la palabra struct cada vez que la quieras hacer referencia.
  • Consejo: Al pasar arrays como parámetro no hace falta indicar la primera dimensión. Es obligatorio indicar todas las dimensiones excepto la primera. Es un número innecesario que tendrás que estar cambiando cada vez que hagas una modificación de tamaño.
  • Consejo: Utiliza constantes para todos los tamaños. Evita utilizar números sueltos que no aporten información y que haga más complicado la modificación de tamaños.
  • Aviso: En la función carga() no tienes en cuenta que haya más registros en el fichero que espacio en el array.
  • Aviso: Utilizar fscanf() o scanf() no es recomendable para cadenas de texto char[]. Lo recomendable es utilizar fgets().
Código
  1. fgets(char *array, int limite_de_caracteres_a_copiar, FILE *fichero);

Aquí me surge una duda y es: ¿por qué utilizas unos arrays de longitud 20 y otros de longitud 21? Y si la respuesta va a ser que la longitud es 21 para que entren los 20 que tiene el original + el caracter de fin de cadena, decir que el caracter de fin de cadena también lo tienen los de longitud 20 (lo tienen todas las cadenas char[]).
Dicho esto, seguimos...

  • Consejo: No modificar el valor de i en busquedaDicotomica() por lo que no es necesario pasarlo como puntero. Hacerlo, además, facilita errores si modificas el valor de i sin querer.
  • Consejo: No utilizas la variable <palabra> en busquedaDicotomica().
  • Error: En la función Menu() no devuelves nada y tienes que devolver un int.
  • Error: En la función Menu1() tampoco devuelves nada. Además aunque C trabaja internamente igual con int/char es mejor devolver un char para que se entienda mejor.
  • Error: En la función Menu2() más de lo mismo.
  • Error: En la función tradu() recibes un int* (i) y luego lo pasas a carga() con &i por lo que en realidad estás pasando a carga() un int** cuando tiene que recibir un int*.
  • Aviso: fflush() está diseñada para limpiar el buffer de salida (stdout), no el de entrada (stdin). No suele dar problemas aunque nada impide que lo haga. Deberías limpiar el buffer de entrada después de cada uso con, por ejemplo:
Código
  1. while(getchar() != '\n');
(Es importante usar esto cuando sepas que el buffer tiene algún contenido porque de estar vacío, el programa no continuará hasta que no introduzcas un enter)
  • Error: En la función tradu() estás llamando a la función cambio() y esta todavía no existe. Si se crean las funciones sin definir los prototipos no se pueden usar funciones en líneas en las que aún no están definidas. Es por esto que o se organiza bien el orden de las funciones o es mejor definir antes del main() los prototipos y después del main() el cuerpo de las funciones.
  • Consejo: El código debería estar mejor indentado y especialmente en bloques grandes.
  • Error: Línea 122 -> Si encuentras la palabra, incrementas el valor de <band> y después te indicará que la palabra no se encontró cuando no es cierto.
  • Aviso: En <aux> puedes guardar una palabra de hasta 10000 caracteres (cosa que no creo que quieras hacer). Si luego la copias en un array de longitud 20 puedes tener problemas si <aux> tiene más de 20 caracteres. La función que debes usar es strncpy() para especificar el límite de caracteres a copiar.
  • Consejo: En la línea 138 guardas en <medio> (que se llamaría mejor <encontrado> o <indiceEncontrado>) el valor del índica en el que está esa palabra o -1 si no estaba la palabra. No tienes que volver a comprobarlo otra vez.
  • Error: El bucle de la línea 137 es infinito si no se encuentra la palabra.
  • Consejo: La función cambio() no es necesaria y además no debes comprobar cada índice. Es suficiente con que después de usar un fgets() copies:
Código
  1. if(palabra[strlen(palabra)] - 1] == '\n') palabra[strlen(palabra) - 1] = '\0';
  2. else while(getchar() != '\n');
Este bloque de código funciona muy bien junto y engloba dos funciones. Por un lado elimina el salto de línea del enter final y por otro lado deja el buffer de entrada siempre limpio.

La función Agregar() no la he mirado con detenimiento pero así por encima decir que al llamar a carga() otra vez vas a volver a incluir todo el contenido del fichero de nuevo. Además tienes el mismo problema al pasar int** en vez de int*.
El ordenamiento que haces sería un muy buen candidato a una función aparte. Además veo que ordenas según el valor de num por lo que tu búsqueda dicotómica no va a funcionar correctamente pues busca por nombre, no por número.
Además cuando llamas a masBuscada() vuelves a ordenarlo otra vez...

Bueno y ya llegar al main() y encontrarme con otro <T[]>... :-\ :-\
Una mejor manera de repetir los menús es usar un do-while() en vez de usar un while() y llamar al menú antes de empezar y al final de este otra vez.

Creo que con todo lo que he puesto ya tienes para hacer correcciones un buen rato. Además aunque te las haya puesto en un único sitio hay algunas que las he visto varias veces por lo que no servirá si te limitas a cambiar las cosas en el orden que las puse sino que tendrás que revisar bien tu código.
Además veo el código un poco mal estructurado y en muchas ocasiones que las funciones sean tan grandes y los nombres de las variables tan poco descriptivos hace casi imposible el seguimiento del funcionamiento.
30  Programación / Java / Re: Ayuda con JOptionPane mostrar datos en una única ventana. en: 10 Diciembre 2020, 06:34 am
Supongo que el problema sí lo tienes localizado, no? Cada vez que usas showMessageDialog() creas un cuadro de diálogo nuevo. Si metes este método dentro del for() que se repite n veces, crearás n cuadros de diálogo.

La solución es muy sencilla: concatenar en un string todo el texto que quieres mostrar y llamar a showMessageDialog() una única vez fuera del for():
Código
  1. public void mostrarClientes(){
  2.  String mensaje = "LISTA DE CLIENTES"; // Lo inicializamos a una cadena vacia o a un mensaje inicial que queramos mostrar
  3.  Cliente aux;
  4.  for(int i = 0; i < getClientes().getSize(); ++i){
  5.    Cliente = getClientes().get(i);
  6.    // Ahora concatemos la informacion de cada cliente en una linea nueva
  7.    mensaje += "\nNombre: " + aux.getNombre() + " " + aux.getApellidos() + " - DNI: " + aux.getDni(); //... y lo que sea ...
  8.  }
  9.  // Y una vez acabado el for(), mostramos un unico JOptionPane
  10.  JOptionPane.showMessageDialog(null, mensaje);
  11. }

PD: Para concatenar strings es más eficiente usar StringBuffer o StringBuilder por si quieres echar un ojo a esas clases o ya las conoces... :rolleyes:
Suerte  :-X
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines