>>932
文字列を返すには「誰か」が文字列用のバッファを確保しておかなければならない。
お勧めは1.
2.はお手軽だけどprintf("%s %s", foo(), foo())とやるとおかしなことになる(バッファがひとつしかないから)。
3.はあまり使われない方法でp = foo(); free(p); と見た目的にmalloc/freeが対になってないのでなんとなく不安。

1. 呼び出し側が確保
char *foo(char *buf, size_t buf_size){ return buf; }

2. static, global変数で確保
char *foo(){ static char buf[256]; return buf; }

char buf[256];
char *foo(){ return buf; }

3. 動的に確保
char *foo(){ char *p = malloc(256); return p; }