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