自動的に適切なサイズの領域を確保したりとか

ができない。

#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を投げた方がスマート。
これこそが「ポインタのポインタ」の使い方か!?