En el código siguiente, la línea:Fallo de segmentación - Char puntero
*end = *front;
da un fallo de segmentación. Hice una pregunta similar here pero no estoy seguro de si esto es porque tengo dos copias de num. Por favor explica por qué es seg-faulting. Gracias.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* getPalin(char* num);
int main()
{
char* num = (char*)malloc(100);
num = "123456";
printf("%s\n", getPalin(num));
return 0;
}
char* getPalin(char* num)
{
int length = strlen(num);
if (length % 2 == 0)
{
char* front = num;
char* end = num + strlen(num) - 1; //pointer to end
while(front != num + (length/2)) //pointers not middle yet
{
*end = *front;
printf("%c", *end);
front++;
end--;
}
}
return num;
}
lo siento, no sizeof (num), pero el tamaño de la memoria asignada, es decir 100. Es decir. strncpy (num, "123456", 100); – Konstantin
OP pidió explicaciones pero usted solo dio una solución. Y nunca olvides agregar manualmente terminador nulo después de strncpy porque no está garantizado que strncpy lo agregue. Sé que no es relevante en este ejemplo porque "123456" es más corto que 100 bytes, pero si decidiste usar strncpy en lugar de strcpy, úsalo correctamente. Evitaste un problema potencial (desbordamiento del búfer) pero introdujiste otro (cadena sin terminar) . – qrdl
@qrdl: siempre que el tamaño de destino especificado en strncpy sea mayor que la longitud de la cadena, strncpy se rellenará automáticamente con caracteres nulos. Solo si el tamaño de destino se especifica como inferior a la longitud de cadena que se va a copiar, es posible que se omita el terminador nulo. Otro punto importante es recordar que strncpy NO verificará que haya suficiente espacio en la memoria de destino. Entonces supongo que strncpy (num, "123456", sizeof (num)) sería más correcto. – ChrisBD