回答編集履歴

8

修正

2019/04/18 17:10

投稿

LouiS0616
LouiS0616

スコア35660

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

修正

2019/04/18 17:10

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
File without changes

6

修正

2019/04/18 17:00

投稿

LouiS0616
LouiS0616

スコア35660

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

修正

2019/04/18 17:00

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  簡単に対応できそうな方法は一つ。
14
14
 
15
- - ポインタのポインタを渡す
15
+ - ポインタのポインタを渡す **(ただし、変数の生存期間に充分留意すること)**
16
16
 
17
17
 
18
18
 

4

修正

2019/04/18 16:46

投稿

LouiS0616
LouiS0616

スコア35660

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

修正

2019/04/18 15:25

投稿

LouiS0616
LouiS0616

スコア35660

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' か = 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

追記

2019/04/18 15:24

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -2,21 +2,29 @@
2
2
 
3
3
  > ```C
4
4
 
5
- void digit(char* s){
6
-
7
- ...
8
-
9
- s = tmp; //ポインタが配列tmpを指すように変更
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

修正

2019/04/18 15:21

投稿

LouiS0616
LouiS0616

スコア35660

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
+ **註:** 文字列リテラルで確保した領域は読み取り専用だった筈。