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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
マミタス

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

#1

投稿記事 by マミタス » 8年前

コード:

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;
}

box
記事: 2002
登録日時: 13年前

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

#2

投稿記事 by box » 8年前

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: どこがわるいかわかりません

#3

投稿記事 by マミタス » 8年前

遅くなってすいません。ありがとうございましたm(_ _)m

閉鎖

“C言語何でも質問掲示板” へ戻る