自動的に適切なサイズの領域を確保したりとか
ができない。
#include
void allocAndCopy(char *str) {
str = malloc(10); // バッファを確保
memcpy(str, "(・∀・)", 10); // 適当なものをコピー
printf("mallocしたスコープ内 : %s\n", str); // 一応表示してみる
return;
}
int main()
{
char **str; // 変数の作成
allocAndCopy(*str); // 変数に領域を割り当てたり
printf("mallocしたスコープ外 : %s\n", *str); // こっちでも表示
free(*str); // 開放
return 0;
}
実行結果:
mallocしたスコープ内 : (・∀・)ポインタは難しいのう。修行が足りん。
mallocしたスコープ外 : (null)
以下追記(23:40)
できた。
#include char *allocAndCopy() {
char *str;
str = malloc(10); // バッファを確保
memcpy(str, "(・∀・)", 10); // 適当なものをコピー
printf("mallocしたスコープ内 : %s\n", str); // 一応表示してみる
return str;
}
int main()
{
char *str; // 変数の作成
str = allocAndCopy(); // 変数に領域を割り当てたり
printf("mallocしたスコープ外 : %s\n", str); // こっちでも表示
free(str); // 開放
return 0;
}
実行結果:mallocしたスコープ内 : (・∀・)実際のコードでは戻り値は
mallocしたスコープ外 : (・∀・)
void
ではなく、他の意味のあるものを返していたんだけれども、うーん、まあいっか。以下追記(2007/01/21 01:37)
#include
void allocAndCopy(char **str) {
*str = malloc(10); // バッファを確保
memcpy(*str, "(・∀・)", 10); // 適当なものをコピー
printf("mallocしたスコープ内 : %s\n", *str); // 一応表示してみる
return;
}
int main()
{
char **str; // 変数の作成
allocAndCopy(str); // 変数に領域を割り当てたり
printf("mallocしたスコープ外 : %s\n", *str); // こっちでも表示
free(*str); // 開放
return 0;
}
実行結果は省略。
この場合、main()
ではchar *str
にして&str
を投げた方がスマート。
これこそが「ポインタのポインタ」の使い方か!?