在下面的代碼,行:分段故障 - 字符指針
*end = *front;
給出段故障。我問了一個類似的問題here,但我不確定這是因爲我有兩個num的副本。請解釋爲什麼它是段錯誤的。謝謝。
#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;
}
對不起,不是sizeof(num),而是分配內存的大小,即100。 strncpy(num,「123456」,100); – Konstantin 2009-06-03 06:31:00
OP要求解釋,但您只給出一個解決方案。並且不要忘記在strncpy之後手動添加空終止符,因爲不能保證strncpy添加它。我知道它在這個例子中是不相關的,因爲「123456」比100字節短,但是如果你決定使用strncpy而不是strcpy,請正確使用 - 避免了一個潛在的問題(緩衝區溢出),而是引入了另一個(未終止的字符串) 。 – qrdl 2009-06-03 06:38:04