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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / [AYUDA EN C] Leer texto del teclado y guardar en una variable llamada char *str en: 28 Septiembre 2016, 22:44 pm
Hola Queridos colegas programadores. Me llamo Gabriel y soy estudiante de Sistemas Especializado en Java. Hoy me pidieron entregar un ejercicio en el que se debe programar en C, y no nos explicaron eso en toda la cursada. Es decir, hay que arreglarselas con Internet.
La consigna es que lo compile en la consola de Ubuntu, y el usuario ingrese el nombre de un archivo que este en el directorio actual, y depende su extensión (jpg, mp3 o txt) le cambiara el nombre (de txt a no me acuerdo, supongamos que a mp3, y asi con cada uno cambiarlo a otra extension (en el código queda claro)). Después de renegar mucho y buscar equivalentes a funciones de java en c para poder armar el código (que parece sencillo, pero venir de java a c, es complejo, muchas cosas son muy distintas, que no te mientan) pude lograr que el código funcione. Haga lo que tenga que hacer.
El código anda. Por ejemplo, creo un archivo en un directorio, el archivo es ejemplo.txt
Después en mi código defino a char *str= ejemplo.txt y hace el cambio de extensión exitosamente.
Pero ahora lo que quiero es que char *str se defina por lo que el usuario le pase por teclado.
Intente con las siguientes, y me lanzan este tipo de errores:
   main ( char *argv) Me tira violacion de segmento
   scanf("%s",str); No me sirve. Ingreso el dato y me devuelve violación de segmento (core)
   fgets (str, strlen(str), stdin) == NULL;Ingreso el dato y me devuelve violacion de segmento (core)
   /gets(str) Me dice que no esta definida gets
Nose me ocurre que hacer para arreglarlo. Es lo único que falta. Lo invito a que defina a char *str con algun archivo suyo y haga la prueba, vera que funciona. Lo único que me falta es que se le asigne la cadena que ingresa el usuario.
Sé que las funciones scanf y gets no funcionan, por que en mi código no definí a los chars con un número de tamaño. Investigando vi que todos ya saben de antemano cuanto mide su cadena y la definen. Ejemplo, char *prueba[3]= "ere". Pero yo no se la longitud del nombre del archivo  que va a ingresar el usuario. y probé definiendo a char *str con diferentes números, pero haciendo eso, desde la función rename hasta la de strlen y todas la que interactúan con mi cadena str, me dan el error: la función pide un argumento tipo char * y usted le pasa un argumento char **
Si me pueden ayudar a ingresar el dato por teclado y quede guardado en la variable str, se lo s agradeceré muchísimo! Acepto cualquier sugerencia útil! Y desde ya gracias por su tiempo amigos!
Código:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
   char *temporalsito;
   char *mp3 = "mp3";
   char *jpg = "jpg";
   char *txt = "txt";
   int esMp3 = 0;
   int esTxt = 0;
   int esJpg = 0;
   char *str = "Rata.mp3";
  
  
   //scanf("%s",str); No me sirve. Ingreso el dato y me devuelve violacion de segmento (core)
   //fgets (str, strlen(str), stdin) == NULL;Ingreso el dato y me devuelve violacion de segmento (core)
   //gets(str) Me dice que no esta definida gets
  

   int len = strlen(str);
   char *extension = &str[len-3];
   char nueva[str[len]];
   int posicion = strlen( str ) - strlen( strstr( str, extension ) );
    
     // copiar la primera parte
  for( int a = 0; a < posicion; a++ ){
     nueva[ a ] =str[ a ];}
    
     // copiar la segunda parte
     for( int l = posicion;l < strlen(str ); l++ ){
     nueva[ l ] = str[ l+3 ]; }// 3 es el tamaño de la parte
    
  nueva[strlen( nueva )] = '\0';
 // printf( "%s\n", nueva );
   for (int  d=0; d <= 3; d++){
       if (mp3[d] == extension[d]){
          esMp3 = esMp3 +1;
   }
       else if (txt[d] == extension[d]){
          esTxt = esTxt + 1;
   }
       else if (jpg[d] == extension[d]){
          esJpg= esJpg +1;
   }
      else {
         printf("Imposible hacer la conversión, ingrese un archivo compatible con el  logaritmo la próxima vez.\n");
          return 0;
   }
   }
   printf("El archivo que modificaremos es %s\n",str);
   printf("la extension es %s\n",extension);
  //comparo variables de extensiones y pongo nombre provisorio
  if (esMp3>2){
  
      temporalsito = "jpg";
   }
   else if (esJpg>2){
    
       temporalsito = "txt";
   }
   else if (esTxt>2){
    
     temporalsito = "mp3";
   }
  

   strcat(nueva , temporalsito);

   int ret;
   ret = rename(str, nueva);
  
   if(ret == 0)
   {
      printf("Nombre Cambiado Correctamente. Su nuevo nombre es %s\n", nueva);
   }
   else
   {
      printf("Error: No se puede cambiar de nombre. \n");
   }
  
  
  return 0;
    
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines