4 に答える
1
次のようにすると、foo() の結果をどこでも使用できます。ただし、これを変更したり解放したりしないでください。このコードが DLL またはライブラリの一部であるかどうかは関係ありません。
const char * foo() {
return "hello";
}
// This is identical.
const char * foo() {
const char *x = "hello";
return x;
}
変更できるようにしたい場合は、次のようにすることができます。は staticであるため、すべての呼び出しfoo()
は同じメモリを参照することに注意してください。x
ここでは、 を変更できますがx
、解放しないでください。
char * foo() {
static char x[] = "hello";
return x;
}
の結果を解放できるようにしたい場合はfoo()
、 でスペースを割り当てる必要がありますmalloc()
。
于 2012-12-25T03:18:26.613 に答える
1
コードの観点からのみであれば、これは安全です。ただし、test() では、文字列 const のみを str に割り当てることができることを確認する必要があります。次のような場合:
const char *test() {
char somestr[somesize];
str = somestr;
return str;
}
それはまだ安全ではありません。
于 2012-12-25T03:11:36.247 に答える
0
ポインターに文字列リテラルを割り当てれば安全ですが、そうする場合は、関数を全体から除外するのが最善のようです。
static char str[] = "hello world";
次に、配列がポインターに減衰するだけなので、str
like aを使用できます。static char *
于 2012-12-25T03:18:47.937 に答える
0
への割り当てstr
も必要ありません。それがなくても、関数から文字列リテラルのアドレスを返し、その後その文字列をどこでも安全に使用できます。
于 2012-12-25T03:12:58.440 に答える