回答編集履歴
2
文言
answer
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
1
|
+
文字列リテラルだけを返すのなら、関数 `str` のように単純に`return`して大丈夫です。(返り値の型は `const char*` がいいだろうとか `str` の後に`(void)`が無いとかの問題はありますが)
|
2
2
|
|
3
3
|
文字列リテラルではない文字列を返すなら、一般的には `snprintf()` や `strcpy_s()` のように結果を入れるバッファとバッファのサイズを引数として渡します。
|
4
4
|
|
5
5
|
引数で指定できない場合は、
|
6
6
|
* `strdup()` のように、`malloc()`した領域を返して呼び出し側で `free()` してもらう
|
7
|
-
* スレッドセーフである必要がないのであれば、
|
7
|
+
* スレッドセーフである必要がないのであれば、大域変数の配列や static な局所変数の配列に文字列を格納してそのアドレスを返す。
|
8
8
|
|
9
9
|
などが考えられます。
|
10
10
|
|
1
いろいろ
answer
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
-
文字列リテラルだけを返すのなら、関数 `str
|
1
|
+
**文字列リテラルだけ**を返すのなら、関数 `str` のように単純に`return`して大丈夫です。(返り値の型は `const char*` がいいだろうとか `str` の後に`(void)`が無いとかの問題はありますが)
|
2
2
|
|
3
|
+
文字列リテラルではない文字列を返すなら、一般的には `snprintf()` や `strcpy_s()` のように結果を入れるバッファとバッファのサイズを引数として渡します。
|
4
|
+
|
5
|
+
引数で指定できない場合は、
|
6
|
+
* `strdup()` のように、`malloc()`した領域を返して呼び出し側で `free()` してもらう
|
7
|
+
* スレッドセーフである必要がないのであれば、グローバルのバッファや関数 static なバッファに文字列を格納してそのアドレスを返す。
|
8
|
+
|
9
|
+
などが考えられます。
|
10
|
+
|
11
|
+
----
|
12
|
+
|
13
|
+
|
3
14
|
クラッシュしているのは、`a[10]` のサイズが足りないからです。文字コードが UTF-8 だとすると、9 * 3 + 1 で28バイトは必要です。
|