2013-11-25 69 views
1

我在理解strlen和/或memcpy时遇到问题。 这是片段:Strlen导致段错误

char * restP; 
char * str; 
//this returns a pointer 
restP = strrstr (input_buffer, "pointer"); 
//this prints this pointer 
printf("%p\n", restP); 

str = malloc(50000); 

//this is wrong, restP is a pointer to a sring; i can print it with printf("%s", restP); it just a part of input_buffer 

memcpy(restP, str, strlen(restP)-1); 

的strlen(restP)给我一个错误 - segmentation fault. 也许有人可以给我一个线索我在做什么错。

+0

你确定它是'strlen'而不是'memcpy'吗? – dreamlax

+1

您的第一个2个memcpy参数被反转 –

+0

您没有为restP变量分配内存。 –

回答

3

看起来您的参数memcpy是错误的方法。第一个参数是目的地,第二个参数是。看起来您想将restP的内容复制到str。 。

memcpy(str, restP, strlen(restP) + 1); 

我添加了一个到的restP长度,以便空字符复制太(未计入的strlen部分你不需要减一strlen除非:

  1. 你知道str足够长,使得被复制到它会以空字符结尾的任何适当大小的字符串。

  2. 你不WA它初始化为零nt复制源字符串的最后一个字符。

3

Strlen计数字符,直到达到NUL('\ 0')字符。确保你的字符串包含这个字符,否则strlen会计算数组边界,出现分段错误的情况。 C不提供数组边界的检查。

此外,检查您传递的指针是否有效(即它不为空)。