Saltar a contenido

1stLabC

Ejercicios

  1. MiFuncion
  2. Eco

Ejercicio 1

  • Reorganizar los fuentes del segundo ejemplo para que el c贸digo de MiFuncion()聽est茅 en un archivo fuente adicional, separado de ejPrintf.c y denominado MiFuncion.c
  • La soluci贸n no requiere programaci贸n alguna sino 煤nicamente reorganizar el c贸digo en 2 archivos fuente (ejPrintf.c, MiFuncion.c) y un archivo cabecera (ejPrintf.h)
  • Se deber谩 producir el ejecutable de las dos maneras comentadas: compilando en una s贸la orden y separando la compilaci贸n y el montaje en 贸rdenes separadas

Ejercicio 2

Completar el c贸digo en la plantilla echo_simple.c para que el programa escriba en pantalla lo mismo que lee de teclado invocando la llamada al sistema scanf()

Plantilla echo_simple.c
#include <stdio.h>

int main(void) {
    char mens[50];




    return 0;
}

Ejemplo scanf()

TutorialsPoint

Ejercicio 3: C la navaja suiza del programador

Hacking C

  1. gets() ha sido considerado obsoleto y, por tanto, su uso es desaconsejado (deprecated) desde el est谩ndar C11 y posteriores debido a su comportamiento inseguro (unsafe). Dado que no permite controlar el n煤mero de datos le铆dos puede facilitar buffer overflows
  2. En este caso es importante tambi茅n como ejemplo de c贸digo C/C++ causante de errores segmentation fault (core dumped)

El ejercicio consiste en compilar y comprobar el correcto funcionamiento del siguiente c贸digo

echo_depre.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * Posible orden de compilaci贸n:
 * gcc -Wall -g echo.c -o bin/eco2
 */
int main(void) {
   int num, i;
   char str1[50], str2[10];

   printf("Teclear un n煤mero\n");
/*
 * Lo mismo que:
 *  fprintf(stdout, "Introducir n煤mero\n");
 */
   scanf("%d", &num);
   fprintf(stdout, "El n煤mero es %d\n", num);
/*
 * OJO:
 * scanf() dej贸 el '\n' (retorno de carro) en el buffer
 * el siguiente scanf() se lo salta
 */
   printf("Teclear otro n煤mero\n");
   scanf("%d", &num);
   fprintf(stdout, "El n煤mero es %d\n", num);

   fprintf(stdout, "=================================\n");

   fprintf(stdout, "Ahora teclear texto\n");
   gets(str1);
/*
 * OJO:
 * gets() se come el '\n' abandonado en el buffer
 * consume el '\n' pero no lo copia as铆 que no se imprime nada
 */
   fprintf(stdout, "El texto es %s\n", str1);
   fprintf(stdout, "Teclear otro texto\n");
   gets(str1);
   fprintf(stdout, "El texto ahora es %s\n", str1);

   fprintf(stdout, "=================================\n");

/*
 * C贸digo con fgets()
 * Consume y copia el \n que cuenta como car谩cter le铆do
 */
   fprintf(stdout, "Teclear un texto (long max 5 chars)\n");
   fgets(str2, 6, stdin);
   fprintf(stdout, "%s tiene longitud %ld\n", str2, strlen(str2));
   fprintf(stderr, "Volcado en stderr del array str2:\n");
   for (i = 0; i < 10; i++)   {
     fprintf (stdout, "%c:\%02hhx;",str2[i],str2[i]);
   }

   fprintf(stdout, "\n");
   fprintf(stdout, "El texto ahora es: %s\n", str2);

   return EXIT_SUCCESS;
}