dudas con strncpy y strncat

Iniciado por Drewermerc, 1 Mayo 2014, 19:43 PM

0 Miembros y 1 Visitante están viendo este tema.

Drewermerc

bueno estuve revisando la wiki y me encontre con lo que no se debe de hacer en c y solo hay algo que no se a que se refere espero que me puedan decir a que se refiere.

el texto es este.
- Tanto strncpy o strncat no proveen un valor de retorno que pueda implicar un error o el exito de la cadena resultante, si no que devuelven un puntero al buffer destino. Por lo tanto requiere un esfuerzo extra por parte del programador.

codigo de prueba:


#include <stdio.h>
#include <string.h>


int main ()
{
char cadena1[]= "hola", cadena2[10];
strncpy(cadena2,cadena1,4);
/*Si yo le digo que en la posicion 5 se finaliza el array todavía se da esto o ya no:

- strncpy tambien tiene un comportamiento que puede afectar el rendimiento del programa en caso que el buffer destino sea considerablemente mas grande que el buffer origen, ya que en este caso se realiza el zero-padding, es decir, llena el resto de la cadena con nulls.*/

cadena2[5] = '\0';
printf("%s\n", cadena2);

return 0;
}


bueno espero me puedan ayudar saludos.

rir3760

Cita de: Drewermerc en  1 Mayo 2014, 19:43 PMbueno estuve revisando la wiki y me encontre con lo que no se debe de hacer en c y solo hay algo que no se a que se refere espero que me puedan decir a que se refiere.

el texto es este.
- Tanto strncpy o strncat no proveen un valor de retorno que pueda implicar un error o el exito de la cadena resultante, si no que devuelven un puntero al buffer destino. Por lo tanto requiere un esfuerzo extra por parte del programador.
Me parece que esta bien explicado.

El valor de retorno de ambas funciones es su primer argumento y es inútil porque, por razones obvias, ya lo conoce quien llama a la función.

El problema con strncpy es:
A) Si copia el máximo de caracteres indicados no agrega el '\0', este se debe agregar de forma manual.
B) Si no copia el máximo de caracteres los restantes se colocan a '\0' sin importar su numero.

Por ello generalmente es mejor utilizar sprintf en lugar de strncpy.

Un saludo
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

Drewermerc

hola rir3760.
buen gracias me quedo ya claro todo.
crea que tiees razon e visto mucho tutoriales de algunos temas y la mayoria usa sprintf y sscanf. entonces es mas conveniente usar estar intrucion por que veo que luego tambien las  sustituyen por printf y scanf y usan ya sea sprintf , sscanf, fprintf, fscanf y fgets.