新城@筑波大学情報です。こんにちは。

In article <6500ebba.0405180636.6339fd4f@posting.google.com>
        mihogaoka2001@yahoo.com (miho) writes:
> > これは、auto 変数を return する話です。strlcpy() の話とは関
> > 係ありません。
> auto変数? 

auto 変数というのは、C言語のローカル変数(デフォルト)のこ
とです。たとえば、次の x は、auto 変数です。

f()
{
    auto int x;
}

まあ、auto って書かなくてもいいんだけど。

f()
{
    int x;
}

局所変数には、auto の他に、register とか static があります。
register には番地がないので、& が付けらません。static には & 
を付けるのは安全です。& を付けて、return して危ないのは、
auto です。& を付けて return して危ないのは、引数もそうです。
引数に auto って付けると、、、だめか。register はいいけど。

それで、auto 変数の番地を return するのは、だめです。

int *f()
{
    int x ;
        return( &x );
}

In article <6500ebba.0405170627.3e87499@posting.google.com>
        mihogaoka2001@yahoo.com (miho) writes:
> foo(const char s)
> {
>    static char d[SIZE];
>    …;
>    if (strlcpy (d, s, sizeof d) == sizeof d)
>       むにゃむにゃ; 
>    …;
>    return d;
> }

あ、static だ。auto の & で、コンパイラがブツブツいうのを
static と書いてごまかすのは、たしかにへぼい。

In article <6500ebba.0405180636.6339fd4f@posting.google.com>
        mihogaoka2001@yahoo.com (miho) writes:
> へぼいプログラマが安易にコードを変更した場合に、
> (先の例における) sizeof d を変更し忘れて、その結果、
> 正しくないプログラムになってしまうことがある、
> と言いたいんですけど。

何でオブジェクトの長さを入れるのを「安易」にすると決めつけわ
け。ちゃんと malloc() から追跡したり、sizeof() の意味を理解
して、きちんと考えて直さなきゃだめでしょ。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\