- 締切済み
文字列 数 変換
数字列を数に変換できなかった男です。 以下はコンパイルエラー patn.c: In function 'input': patn.c:9:3: warning: function returns address of local variable [-Wreturn-local- addr] return (str); ^ 以下は実行後、 数を入力してください。 123.456 ・・,( 0.000000 0 0 以下は書いたプログラムです。 #include<stdio.h> #include<stdlib.h> char *input(void){ char str[100]; printf("数を入力してください。\n"); scanf("%s",str); return (str); } int main(void){ char *a; double d; int i; long l; a=input(); printf("%s\n",a); d=atof(a); i=atoi(a); l=atol(a); printf("%f %d %ld",d,i,l); return(0); } 関数input()にchar *str2; str2=str; return(str2);としても、実行後の表示はおかしいです。 123.456 123 123.456と表示したいです。御指摘お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- trytobe
- ベストアンサー率36% (3457/9591)
char *input(void){} という関数の中でローカルに定義しただけの char str[100]; のポインタ( str のアドレス) を返しても、 もうその関数を出た時点で、その領域は str のものではなくなっている(ローカルだから)ので、コンピュータは好き勝手に他のものに使ってしまうのです。 コンパイラは、そういうローカルな変数のアドレス(ポインタ)を返してもムダだよ、という警告をしてくれているのです。 一番楽な解決法は、関数の外で、グローバルな変数として char str[100]; を定義しておく、というものですが、そうなると、返数として str を用いることすら不要になってしまいます・・・。
お礼
ローカルの説明と、お返事ありがとうございます。