Почему мой вызов printf() не отображает правильные символы в консоли?

В визуальной студии я ясно вижу, что rstr() (обратная строка) функция возвращает "olla\0", но на дисплее консоли отображаются нечитаемые символьные символы. Также по какой-то причине после звонка printf()переменная reverse также преобразуется в нечитаемые символьные значения при просмотре переменных в режиме отладки. Кто-нибудь знает, как правильно отображать строку, возвращаемую rstr()?

#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;
}

1 ответ

Решение
const int msg_size = sizeof(message) / sizeof(message[0]);

здесь все не так.

сообщение является char*, так sizeof(message) будет размер указателя на символ.

И с тех пор message[0] это символ, sizeof(message[0]) один по определению. Так что ваши msg_size будет размер указателя на символ.

Вы должны передать длину строки в ваш rstr() функция.

Другие вопросы по тегам