ページ 11

どこがわるいかわかりません

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