ページ 1 / 1
どこがわるいかわかりません
Posted: 2015年12月16日(水) 13:52
by マミタス
コード:
int *Ref1(void){
int n = 500;
return &n;
}
int *Ref2(void){
char str[] = "これはローカルな文字列";
return str;
}
int main(){
printf("Ref1() = %d\n", *Ref1());
printf("Ref2() = %s\n", *Ref2());
return 0;
}
Re: どこがわるいかわかりません
Posted: 2015年12月16日(水) 15:19
by box
1)stdio.h をインクルードしていない
2)Ref1()において、関数内のautomaticな変数nのアドレスを呼び出し元に返そうとしている。
3)Ref2()において、関数内のautomaticな変数strのアドレスを呼び出し元に返そうとしている。
4)Ref2()において、関数の戻り値の型とreturnしたい変数の型が食い違っている。
5)mainにおいて、Ref2の前の*は不要。
というわけで、たぶん、こんな風にすればよいのではないかと思います。
コード:
#include <stdio.h>
int *Ref1(void)
{
static int n = 500;
return &n;
}
char *Ref2(void)
{
static char str[] = "これはローカルな文字列";
return str;
}
int main(void)
{
printf("Ref1() = %d\n", *Ref1());
printf("Ref2() = %s\n", Ref2());
return 0;
}
Re: どこがわるいかわかりません
Posted: 2015年12月17日(木) 10:12
by マミタス
遅くなってすいません。ありがとうございましたm(_ _)m