Herramientas de usuario

Herramientas del sitio


strings

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
strings [2013/08/07 22:52] – [Funciones para manipular strings] lmateustrings [2015/03/31 12:50] (actual) – [Leer de la entrada estándar] lmateu
Línea 13: Línea 13:
 Tanto r como s representan el mismo string.  El diagrama es el siguiente: Tanto r como s representan el mismo string.  El diagrama es el siguiente:
  
-{{ :strings.png?nolink&400 |}}+{{ :strings2.png?nolink&400 |}}
  
 La única diferencia es que el string "hola" queda almacenado en un área del proceso que no permite escribirla. La única diferencia es que el string "hola" queda almacenado en un área del proceso que no permite escribirla.
Línea 63: Línea 63:
 } }
 </code> </code>
 +
 +=== Ejercicio 1 ===
 +
 +Resuelva la pregunta 1 del [[http://users.dcc.uchile.cl/~lmateu/CC3301/controles/c1-141.pdf|control 1 del semestre Otoño de 2014]].  Pruebe su solución con el archivo [[http://users.dcc.uchile.cl/~lmateu/CC3301/download/subst.zip|subst.zip]].  Implemente su solución en el archivo substituir.c.  Compílelo con make y ejecútelo.  El programa le dirá si su solución satisface todos los tests del enunciado.
  
 ==== Desplegar texto en la salida estándar ==== ==== Desplegar texto en la salida estándar ====
Línea 150: Línea 154:
   * argv[0] siempre corresponde al nombre del ejecutable.   * argv[0] siempre corresponde al nombre del ejecutable.
  
-=== Ejercicio ===+=== Ejercicio ===
  
 Programe la función que lleva un string a letras mayúsculas.  Por ejemplo: Programe la función que lleva un string a letras mayúsculas.  Por ejemplo:
Línea 169: Línea 173:
 ^ función ^ ejemplo ^ descripción ^ ^ función ^ ejemplo ^ descripción ^
 | getchar() | ''char c= getchar();'' | Lee un caracter | | getchar() | ''char c= getchar();'' | Lee un caracter |
-| gets(//dest//) | ''fgets(t, 80);'' | Lee una línea terminada en '\n' |+| gets(//dest//) | ''gets(t);'' | Lee una línea terminada en '\n' |
 | fgets(//dest//, //max//, //file//) | ''fgets(t, 80, stdin);'' | Lee una línea terminada en '\n' de //file// | | fgets(//dest//, //max//, //file//) | ''fgets(t, 80, stdin);'' | Lee una línea terminada en '\n' de //file// |
 | scanf(//formato//, //arg1//, ...)  | ''fscanf("%d", &i);'' | Lee datos de la entrada estándar | | scanf(//formato//, //arg1//, ...)  | ''fscanf("%d", &i);'' | Lee datos de la entrada estándar |
  
-=== Ejercicio ===+**Observación**: ''gets'' no recibe como parámetro el tamaño del arreglo de caracteres en donde se deja el resultado 
 +y por lo tanto no se debe usar para leer datos de la red o de un archivo de origen desconocido porque puede 
 +ser blanco de ataques de gusanos o virus.  Consulte en la web por //buffer overflow attack// En su lugar use ''fgets''
 + 
 +=== Ejercicio ===
  
 El siguiente programa despliega la línea más larga de la entrada estándar: El siguiente programa despliega la línea más larga de la entrada estándar:
Línea 186: Línea 194:
   int largo= 0;   int largo= 0;
  
-  while (gets(lin)!=NULL) {+  /* nunca while (gets(lin)!=NULL) pues sería una brecha de seguridad */ 
 +  while (fgets(lin, N, stdin)!=NULL) {
     if (strlen(lin)>largo) {     if (strlen(lin)>largo) {
       strcpy(larga, lin);       strcpy(larga, lin);
strings.1375915964.txt.gz · Última modificación: 2013/08/07 22:52 por lmateu