Nel codice qui sotto, la linea:Segmentation fault - char puntatore
*end = *front;
dà un segmentation fault. Ho posto una domanda simile a here ma non sono sicuro che sia perché ho due copie di num. Si prega di spiegare perché è seg-faulting. Grazie.
#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;
}
scusa, non sizeof (num), ma la dimensione della memoria allocata, ovvero 100. I. strncpy (num, "123456", 100); – Konstantin
OP ha chiesto spiegazioni ma hai dato solo una soluzione. E non dimenticare di aggiungere manualmente null-terminator dopo strncpy perché non è garantito che strncpy lo aggiunga. So che non è rilevante in questo esempio perché "123456" è più corto di 100 byte ma se hai deciso di usare strncpy piuttosto che strcpy, usalo correttamente - hai evitato un potenziale problema (sovraccarico del buffer) ma ne hai introdotto uno (stringa non terminata) . – qrdl
@qrdl - Finché la dimensione di destinazione specificata in strncpy è maggiore della lunghezza della stringa, strncpy eseguirà automaticamente il riempimento con caratteri nulli. È solo se la dimensione della destinazione è specificata come inferiore alla lunghezza della stringa da copiare che il terminatore null può essere perso. Un altro punto è ricordare che strncpy NON verificherà che ci sia spazio sufficiente nella memoria di destinazione. Quindi suppongo che strncpy (num, "123456", sizeof (num)) sia più corretto. – ChrisBD