Почему мой вызов 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()
функция.