289デフォルトの名無しさん  02/01/17 20:39char* f(void)

 {
  char *a="abcdefg";
  return a;
 }

 int main(void)
 {
  printf("%s\n",f());
  return 0;
 }

 これなんですが
 コンパイラはエラーにならず通りました。
 局所変数のアドレスを返すのはまずいと知っているんですが
 定数は大丈夫なんでしょうか?


290デフォルトの名無しさん sage 02/01/17 20:41>>289

 問題ない。
 char a[]="abcdefg";
 return a;
 だとまずいが。

 ただ、文字列定数はconst char*にした方が良いと思われ。
 const char* f(void)
 {
  const char *a="abcdefg";
  return a;
 }


294デフォルトの名無しさん sage 02/01/17 20:55>char a[]="abcdefg";

 >return a;
 >だとまずいが。
 何故ですか?


295デフォルトの名無しさん sage 02/01/17 20:59ぞくにいう

 宙ぶらりんのポインタ


296デフォルトの名無しさん sage 02/01/17 20:59>>294

  次からは
  C言語なら、俺に聞け! <11>
  http://pc.2ch.net/test/read.cgi/tech/1009499565/
  で聞け

  それは ブロック内だけ有効な実体である aのアドレスをブロック外に返してるからだ


297デフォルトの名無しさん sage 02/01/17 21:00>>294それだと、局所変数のアドレスを返すから。

  >>289は局所変数ではなく、文字列リテラルのアドレスを返してるから大丈夫。