문자열의 일부 순서를 뒤집는 함수를 만들려고합니다. 포인터를 사용하는 것에 익숙하지 않고 문자열의 문자 위치를 액세스하여 부분 문자열을 복사 할 수 있지만 같은 위치에 다시 넣을 수는 없습니다 ...memcpy 중 세그먼트 오류
되돌려 진 부분 문자열을 원래 위치로 다시 복사합니다.
프로그램 수신 신호 SIGSEGV, 세그먼트 오류. 에서 0x00007ffff7b5dc66 ??() from /lib/x86_64-linux-gnu/libc.so.6
어떤 도움도 굉장 할 것입니다!
는 여기에 지금까지 가지고 무엇을 : 원래 문자열의 0 터미네이터가 포함되지 않는
void reverse(char* line, int start, int end){
char str[end-start];
memcpy (str , line + start , end-start);
reverseSubString (str);
memcpy (line + start, str , end-start);
}
void reverseSubString(char* str){
int i, j, len;
char temp;
i=j=len=temp=0;
len=strlen(str);
for (i=0, j=len-1; i<=j; i++, j--)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
은 왜 그냥 오히려 복사를 반전하고 복사하는 것보다, 장소에 문자열을 반전? strlen을 사용하는 대신에 reverseSubString에 길이 인수를 전달하십시오 (아래 답변에 언급 된 것처럼 버그의 출처입니다). –
reverseSubString은 문제없이 실행되지만 어디에서 왔는지 알 수 있습니다. 나는 "솔리드"길이를 통합하기 위해 변경했지만 두 번째 memcpy는 여전히 세그멘테이션 오류를 발생시킵니다. 나는 원래 같은 문제를 겪고 있었다. – ThomDall
"reverseSubString이 문제없이 실행됩니다."- 아니요, NUL 종료가 아닌 임의의 문자 시퀀스에서 발생하지는 않습니다. "원래는 같은 문제를 일으키고 있었지만 처음에는 되돌리려 고했습니다."- 무의미한 복사본을 추가하는 대신 이해하고 문제를 해결해야했습니다. –