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

[SOLUCIONADO] fwrite escriba þþþþþþþþþ

Estas en el tema de fwrite escriba þþþþþþþþþ en el foro de C/C++ en Foros del Web. Hola estoy haciendo un simple programa en la que el ususario puede agregar tantas palabras a un archivo como quiere. Pero al escribir fwrite me ...
  #1 (permalink)  
Antiguo 31/05/2013, 01:22
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
fwrite escriba þþþþþþþþþ

Hola estoy haciendo un simple programa en la que el ususario puede agregar tantas palabras a un archivo como quiere. Pero al escribir fwrite me muestra cosas como :
palabra escriba þþþþþþþþþ palabra escriba

El codigo es:

Código C++:
Ver original
  1. // file 2.cpp: define el punto de entrada de la aplicación de consola.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <iostream>
  8. using namespace std;
  9. int main(void)
  10. {
  11.     char more[10];
  12.     char frase[100];
  13.     FILE *archivo;
  14.     fopen_s(&archivo,"prueba.txt","ab");   
  15.     do{
  16.         fflush(stdin);
  17.         printf("Escriba una frase: ");
  18.         gets_s(frase);
  19.         fflush(stdin);
  20.         if(archivo){
  21.             sprintf_s(frase,"%s\n",frase);
  22.             fwrite(&frase,sizeof(frase),1,archivo);
  23.             printf("Quiere escribir otra? ");
  24.             gets_s(more);
  25.         }else{
  26.             strcpy_s(more,"n");
  27.             printf("Archivo no creado.");
  28.         }
  29.     }while(strcmp(more,"n"));
  30.     getchar();
  31. }

Como solucionar lo?
  #2 (permalink)  
Antiguo 31/05/2013, 03:13
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: fwrite escriba þþþþþþþþþ

Línea 21: El prototipo de sprintf_s es

int sprintf_s (char *buffer, size_t sizeOfBuffer, const char *format, [argumento, ...] );

Obviamente, te falta el parámetro con el tamaño del buffer. Aquí el compilador debería haber marcado un error o al menos un warning, a menos que en alguna parte haya una redefinición de sprintf_s a sprintf. Creo que las funciones XXX_s están destinadas a sustituír a sus correspondientes sin _s porque aportan más seguridad, pero no sé hasta dónde ha llegado esta sustitución en los compiladores (supongo que, de momento, puede que no haya portabilidad).

Linea 22: El primer parámetro de fwrite es un puntero al buffer que quieres escribir en el archivo. En este caso, dado que frase es un arreglo de caracteres, y en C el nombre de un arreglo es un puntero al primer elemento del arreglo, en realidad lo que estás pasando es un puntero a puntero, con lo que en el archivo estás guardando quién sabe qué cosas. Debes poner fwrite(frase, ....). Esta es la (casi) segura causa del error.

Saludos,

Etiquetas: fwrite, int, programa, simple, string
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 11:19.