-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;
}
「r」はローカルスコープです。その関数から戻ると、スコープは失われ、データはゴミです。ヒープ上にスペースを割り当てるには 'malloc'を使います。 –