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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con sprintf()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con sprintf()  (Leído 1,753 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
problema con sprintf()
« en: 25 Septiembre 2013, 19:02 pm »

Saludos

Tengo el siguiente programa que le pide al usuario que ingrese el nombre de cualquier archivo que desee abrir y una vez que teclea el nombre se lo asigna a un arreglo que se llama archivo, para esto uso el sprintf, pero no se cual es el problema que aunque le ingreso un archivo que si existe me aparece que no se pudo abrir archivo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4.  
  5. int main()
  6. {
  7.    int i,j;
  8.    char nombre[MAX],archivo[MAX];
  9.    FILE *fd;
  10.    printf("Dame el nombre del archivo: ");
  11.    fgets(nombre,MAX,stdin);
  12.    sprintf(archivo,"F:\\%s.txt",nombre);
  13.    if((fd = fopen(archivo,"r"))!=NULL)
  14.    {
  15.        printf("Si se pudo abrir archivo");
  16.    }
  17.    else
  18.       printf("No se pudo abrir el archivo");
  19.    return 0;
  20. }
  21.  

de antemano gracias


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema con sprintf()
« Respuesta #1 en: 25 Septiembre 2013, 19:30 pm »

La función fgets lee una linea y la almacena incluyendo el avance de linea en la dirección indicada. Para solucionarlo solo tienes que eliminar ese carácter. Para ello puedes utilizar la función strchr (prototipo en <string.h>), de esta forma:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX 100
  6.  
  7. int main(void)
  8. {
  9.   FILE *fd;
  10.   char nombre[MAX];
  11.   char archivo[MAX];
  12.   char *p;
  13.  
  14.   printf("Dame el nombre del archivo: ");
  15.   fflush(stdout);
  16.   if (fgets(nombre, MAX, stdin) == NULL)
  17.      return EXIT_FAILURE;
  18.   if ((p = strchr(nombre, '\n')) != NULL)
  19.      *p = '\0';
  20.  
  21.   sprintf(archivo,"%s.txt",nombre);
  22.   if((fd = fopen(archivo,"r")) != NULL){
  23.      puts("Si se pudo abrir archivo");
  24.      fclose(fd);
  25.   }else {
  26.      perror(nombre);
  27.      return EXIT_FAILURE;
  28.   }
  29.  
  30.   return EXIT_SUCCESS;
  31. }
La llamada a sprintf la debes modificar, ello depende de donde se encuentre (en tu caso, por supuesto) el archivo.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Warning: sprintf() [function.sprintf]: Too few arguments
PHP
Rudy21 3 5,655 Último mensaje 30 Julio 2008, 15:51 pm
por Ertai
Problema con sprintf()
Programación C/C++
soyloqbuskas 2 2,285 Último mensaje 12 Octubre 2012, 02:47 am
por soyloqbuskas
Arreglos,punteros y sprintf.-
Programación C/C++
DanielPy 4 2,864 Último mensaje 13 Diciembre 2013, 17:50 pm
por DanielPy
problema con sprintf
Programación C/C++
m@o_614 3 2,245 Último mensaje 11 Febrero 2014, 03:01 am
por Yoel Alejandro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines