2016-10-18 3 views
1

그래서 * char 걸리고 그것을 반대로 함수를 빌드하려면 노력하고있어. 함수는char 포인터를 수정 하시겠습니까?

void reverse_str(char *str, int N){ 
    char temp; 
    temp = str[i]; 
    str[i] = str[N-i]; 
    str[N-i] = temp; 
    if (i == N) 
    { 
     return; 
    } 
    i++; 
    reverse_str(*str, N); 
} 

(N 문자열의 길이)하지만 두 개의 매개 변수를 컴파일러 코드의 세 번째 행에 도달 어떤 이유로; str[i] = str[N-i]; 빈 포인터를 반환합니다. '\0'

복사본을 만들지 않고 str을 수정할 수 있습니까? 나는 어떤 종류의 잘못된 선언을 했습니까?

BTW i은 0과 동일한 전역 값이며 함수가 반복적으로 호출 될 때마다 증가합니다.

+1

"N은 문자열의 길이입니다." 즉'str [N-0]'은 항상 NUL입니다. 정의에 따르면 C 문자열은 NUL 문자를'strlen' 색인에있는 마지막 문자로 사용하기 때문입니다. – kaylum

+0

while (N> 1) {swap (& str [0], & str [N-1]); N - = 2; str ++; }'할 수도 있습니다. – chux

답변

1

첫 번째 단계로 함수를 호출하기 전에 N = N- 을 입력하십시오. 그러면 문제가 해결됩니다.

N이 길이이면 끝 문자이므로 char_array [N]은 '\ 0'이됩니다. (기본적으로 문자열 터미네이터). 당신은 \ 0보다 먼저 모든 것을 조작하기를 원하지만 그것을 포함하고 싶지는 않습니다.

+0

'char x [] = ""고려해보십시오. int N = strlen (x); N = N-1; reverse_str (x, N);'reverse_str()'이 필요에 따라'-1'을 처리하도록하는 것이 좋습니다. – chux

+0

나는 실제로 그것을 바꿨다. 그리고 그것이 i == 0 일 때 작동하지만, 그것이 증가하면 그것은 세 번째 줄에 EXC_BAD_ACCESS를 준다. 이견있는 사람? – Abeer

+0

문자열 리터럴로 호출하고 있습니까? 문자열 리터럴은 수정할 수없는 배열을 나타냅니다 (더 정확하게는 수정하려고 시도하면 정의되지 않은 동작이 있음). –

관련 문제