回答編集履歴
8
修正
answer
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
|
11
11
|
- tmpを使わず、sが指し示す先を直接書き換える
|
12
|
-
-
|
12
|
+
- strncpy
|
13
13
|
|
14
14
|
**註:** 文字列リテラルで確保した領域は読み取り専用だった筈。
|
15
15
|
|
7
修正
answer
CHANGED
File without changes
|
6
修正
answer
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
> ```
|
5
5
|
|
6
6
|
ポインタ変数自体を関数内でいくら書き換えようと、呼び出し元には影響しません。
|
7
|
-
簡単に対応できそうな方法は一つ。
|
7
|
+
~~簡単に対応できそうな方法は一つ。~~
|
8
|
-
- ポインタのポインタを渡す **
|
8
|
+
- ~~ポインタのポインタを渡す~~ **非推奨。理由はコメント欄に記載しています。**
|
9
9
|
|
10
10
|
あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
|
11
11
|
- tmpを使わず、sが指し示す先を直接書き換える
|
5
修正
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
ポインタ変数自体を関数内でいくら書き換えようと、呼び出し元には影響しません。
|
7
7
|
簡単に対応できそうな方法は一つ。
|
8
|
-
- ポインタのポインタを渡す
|
8
|
+
- ポインタのポインタを渡す **(ただし、変数の生存期間に充分留意すること)**
|
9
9
|
|
10
10
|
あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
|
11
11
|
- tmpを使わず、sが指し示す先を直接書き換える
|
4
修正
answer
CHANGED
@@ -4,6 +4,16 @@
|
|
4
4
|
> ```
|
5
5
|
|
6
6
|
ポインタ変数自体を関数内でいくら書き換えようと、呼び出し元には影響しません。
|
7
|
+
簡単に対応できそうな方法は一つ。
|
8
|
+
- ポインタのポインタを渡す
|
9
|
+
|
10
|
+
あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
|
11
|
+
- tmpを使わず、sが指し示す先を直接書き換える
|
12
|
+
- strcpy
|
13
|
+
|
14
|
+
**註:** 文字列リテラルで確保した領域は読み取り専用だった筈。
|
15
|
+
|
16
|
+
---
|
7
17
|
ついでに、ここも変です。
|
8
18
|
> ```C
|
9
19
|
tmp[j+1] = '0'; //末尾にNULL文字を追加
|
@@ -13,14 +23,4 @@
|
|
13
23
|
'0'はただの数字0であって、NULL文字とは呼べません。
|
14
24
|
|
15
25
|
また、jの値がループ後にどのようになっているか確認した方が良いでしょう。
|
16
|
-
現状のコードではtmp[j]の値が不定です。
|
26
|
+
現状のコードではtmp[j]の値が不定です。
|
17
|
-
|
18
|
-
---
|
19
|
-
簡単に対応できそうな方法は一つ。
|
20
|
-
- ポインタのポインタを渡す
|
21
|
-
|
22
|
-
あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
|
23
|
-
- tmpを使わず、sが指し示す先を直接書き換える
|
24
|
-
- strcpy
|
25
|
-
|
26
|
-
**註:** 文字列リテラルで確保した領域は読み取り専用だった筈。
|
3
修正
answer
CHANGED
@@ -4,15 +4,17 @@
|
|
4
4
|
> ```
|
5
5
|
|
6
6
|
ポインタ変数自体を関数内でいくら書き換えようと、呼び出し元には影響しません。
|
7
|
-
|
8
7
|
ついでに、ここも変です。
|
9
8
|
> ```C
|
10
9
|
tmp[j+1] = '0'; //末尾にNULL文字を追加
|
11
10
|
> ```
|
12
11
|
|
13
|
-
= '\0'
|
12
|
+
tmp[j] = '\0' としてください。
|
14
13
|
'0'はただの数字0であって、NULL文字とは呼べません。
|
15
14
|
|
15
|
+
また、jの値がループ後にどのようになっているか確認した方が良いでしょう。
|
16
|
+
現状のコードではtmp[j]の値が不定です。
|
17
|
+
|
16
18
|
---
|
17
19
|
簡単に対応できそうな方法は一つ。
|
18
20
|
- ポインタのポインタを渡す
|
2
追記
answer
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
ここが問題です。
|
2
2
|
> ```C
|
3
|
-
void digit(char* s){
|
4
|
-
...
|
5
|
-
|
3
|
+
s = tmp; //ポインタが配列tmpを指すように変更
|
6
|
-
...
|
7
|
-
}
|
8
4
|
> ```
|
9
5
|
|
10
6
|
ポインタ変数自体を関数内でいくら書き換えようと、呼び出し元には影響しません。
|
11
7
|
|
8
|
+
ついでに、ここも変です。
|
9
|
+
> ```C
|
10
|
+
tmp[j+1] = '0'; //末尾にNULL文字を追加
|
11
|
+
> ```
|
12
|
+
|
13
|
+
= '\0' か = 0 としてください。どちらかと言えば前者の方が分かり易いでしょう。
|
14
|
+
'0'はただの数字0であって、NULL文字とは呼べません。
|
15
|
+
|
12
16
|
---
|
13
17
|
簡単に対応できそうな方法は一つ。
|
14
18
|
- ポインタのポインタを渡す
|
1
修正
answer
CHANGED
@@ -13,6 +13,8 @@
|
|
13
13
|
簡単に対応できそうな方法は一つ。
|
14
14
|
- ポインタのポインタを渡す
|
15
15
|
|
16
|
-
あるいは、strを文字型配列として確保すれば次の二つ
|
16
|
+
あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
|
17
17
|
- tmpを使わず、sが指し示す先を直接書き換える
|
18
|
-
- strcpy
|
18
|
+
- strcpy
|
19
|
+
|
20
|
+
**註:** 文字列リテラルで確保した領域は読み取り専用だった筈。
|