2017-11-29 8 views
-1

Visual Studio에서 rstr() (역방향 문자열로) 함수가 "olla \ 0"을 반환하지만 콘솔 디스플레이에 읽을 수없는 문자 기호가 표시됨을 분명히 알 수 있습니다. 또한 어떤 이유 때문에 printf()을 호출 한 후 변수 reverse이 디버그 모드에서 변수를 보면서 읽을 수없는 문자 값으로 변환됩니다. 누구든지 rstr()에 의해 반환 된 문자열을 올바르게 표시하는 방법을 알고 있습니까?printf()를 호출 할 때 콘솔에 올바른 문자가 표시되지 않는 이유는 무엇입니까?

#include "stdio.h" 

const char* rstr(const char* message) { 

    const int msg_size = sizeof(message)/sizeof(message[0]); 
    char r[msg_size + 1]; 

    for (int i = 0; i < msg_size; ++i) { 
     r[i] = message[msg_size - i - 1]; 
     if (i == (msg_size - 1)) 
      r[msg_size] = '\0'; 
    } 

    return r; 
} 

int main() 
{ 
    const char* reversed = rstr("allo"); 
    printf("Reversed string is: %s\n", reversed); 

    getchar(); 
    return 0; 
} 
+5

'r'은 로컬 범위입니다. 해당 함수에서 돌아 오면 범위가 손실되고 데이터가 가비지입니다. 'malloc'을 사용하여 힙에 공간을 할당하십시오. –

답변

2
const int msg_size = sizeof(message)/sizeof(message[0]); 

여기에 모든 잘못된 것입니다.

메시지는 char*이므로 sizeof(message)은 char 포인터의 크기가됩니다.

message[0]은 char이므로 정의상 하나는 sizeof(message[0])입니다. 따라서 msg_size은 char에 대한 포인터 크기가됩니다.

rstr() 함수에 문자열의 길이를 전달해야합니다.