この関数は「与えられた文字列の後ろ3文字を返す」という仕様です。 例: "abcd" → "bcd"
ですが、文字列やポインタなどの概念をしっかりと把握していないせいか、自分の思うように動きません。
#include<cstdio>
#include<cstring>
char* getBack3(char *);
int main(){
char *back3 = getBack3("abcd");
printf("main()内に返ってきた>> ");
puts(back3);
printf("\n");
getchar();
}
// 後ろ三文字を入手(strは3文字以上あることが保証されている)
char* getBack3(char* str){
char word[4];
int j = 0;
for(int i = strlen(str)-3; str[i] != '\0'; i++, j++){
word[j] = str[i];
}
word[j] = '\0';
printf("getBack3()内>> ");
puts(word);
return word;
}
関数内では正常に"bcd"を"abcd"から取得しているようですが、main()に戻ってくると以下のように文字化けします。
[tab=30]getBack3()内>> bcd
[tab=30]main()内に返ってきた>> ア㍾
原因はわかりません。
どなたかお助けお願いします。
【15時46分追記】
上記のコードの12行目に 追加して実行すると、この追加したコードは思った通りの動作を実現してくれます。
ですが、strcpy()を使わない方法を教えて下さい。