所定の位置にないcstringを逆にする関数を書いていますが、逆のcstringを返します。戻り値の型は正確には何ですか?
#include <stdio.h>
#include <string.h>
const char* reverStr(const char *str)
{
char revStr[strlen(str)];
int i;
for(i = strlen(str)-1; i >= 0; i--)
revStr[strlen(str)-1-i] = str[i];
printf("returned value should be %s\n", revStr);
return revStr;
}
int main()
{
char aStr[] = "hello";
char aStr2[] = "goodbye";
printf("%s %s", aStr, aStr2);
char* tmp = reverStr(aStr);//tmp now has garbage
printf("\n%s", tmp);
printf(" %s", aStr);
return 0;
}
警告: 関数はローカル変数のアドレスを返します [デフォルトで有効]| 警告: 初期化により、ポインター ターゲット型から 'const' 修飾子が破棄されます [デフォルトで有効] |
に変更しようとしchar* tmp
ましchar tmp[]
たが、コンパイルできませんでした。いつ配列を使用する必要があるのか 、いつポインタを使用する必要があるのか 混乱します。