teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

8

修正

2019/04/18 17:10

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
11
11
  - tmpを使わず、sが指し示す先を直接書き換える
12
- - strcpy
12
+ - strncpy
13
13
 
14
14
  **註:** 文字列リテラルで確保した領域は読み取り専用だった筈。
15
15
 

7

修正

2019/04/18 17:10

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
File without changes

6

修正

2019/04/18 17:00

投稿

LouiS0616
LouiS0616

スコア35678

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

修正

2019/04/18 17:00

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  ポインタ変数自体を関数内でいくら書き換えようと、呼び出し元には影響しません。
7
7
  簡単に対応できそうな方法は一つ。
8
- - ポインタのポインタを渡す
8
+ - ポインタのポインタを渡す **(ただし、変数の生存期間に充分留意すること)**
9
9
 
10
10
  あるいは、strを文字型配列として確保すれば(**註**)、次の二つの方法も選べます。
11
11
  - tmpを使わず、sが指し示す先を直接書き換える

4

修正

2019/04/18 16:46

投稿

LouiS0616
LouiS0616

スコア35678

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

修正

2019/04/18 15:25

投稿

LouiS0616
LouiS0616

スコア35678

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

追記

2019/04/18 15:24

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,14 +1,18 @@
1
1
  ここが問題です。
2
2
  > ```C
3
- void digit(char* s){
4
- ...
5
- s = tmp; //ポインタが配列tmpを指すように変更
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

修正

2019/04/18 15:21

投稿

LouiS0616
LouiS0616

スコア35678

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