回答編集履歴

3

他回答者様のコメント欄での"call by reference"に関するコメントを受け、注釈を追加

2020/05/05 01:55

投稿

dodox86
dodox86

スコア9256

test CHANGED
@@ -38,4 +38,8 @@
38
38
 
39
39
 
40
40
 
41
- 立場を変えて、`sscanf`と言う関数を質問者さん自身が実装することを考えてみてください。`sscanf`に渡されてくる変数が、値渡し(call by value)で渡されたものであると、関数内で変更することはできません。ここで、値を呼び出し側の`main`へ変更して返したい場合は、アドレス、つまりポインターで渡すことで(call by reference) `sscanf`関数の中から作用させることができます。これは文字列(`char`型の配列)であろうと、`int`型であろうと、すべて同じことが言えます。
41
+ 立場を変えて、`sscanf`と言う関数を質問者さん自身が実装することを考えてみてください。`sscanf`に渡されてくる変数が、値渡し(call by value)**※**」で渡されたものであると、関数内で変更することはできません。ここで、値を呼び出し側の`main`へ変更して返したい場合は、アドレス、つまりポインターで渡すことで(call by reference)**※**」`sscanf`関数の中から作用させることができます。これは文字列(`char`型の配列)であろうと、`int`型であろうと、すべて同じことが言えます。
42
+
43
+
44
+
45
+ **※**C言語において「call by value」、「call by reference」と言う用語を使うことは説明上の慣例である場合を除き、不適切である可能性があります。ご注意ください。

2

誤記修正

2020/05/05 01:55

投稿

dodox86
dodox86

スコア9256

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  char msg[256];
22
22
 
23
- sscanf(buf, "%s", &msg[0});
23
+ sscanf(buf, "%s", &msg[0]);
24
24
 
25
25
  ```
26
26
 

1

コードを少し整形、記載内容を修正。

2020/05/04 11:40

投稿

dodox86
dodox86

スコア9256

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  char msg[256];
8
8
 
9
- sscanf(buf,"%s",msg);
9
+ sscanf(buf, "%s", msg);
10
10
 
11
11
  ```
12
12
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  char msg[256];
22
22
 
23
- sscanf(buf,"%s",&msg[0});
23
+ sscanf(buf, "%s", &msg[0});
24
24
 
25
25
  ```
26
26
 
@@ -32,10 +32,10 @@
32
32
 
33
33
  int num;
34
34
 
35
- sscanf(buf,"%d", &num);
35
+ sscanf(buf, "%d", &num);
36
36
 
37
37
  ```
38
38
 
39
39
 
40
40
 
41
- ちょっと反対に考えて、`sscanf`と言う関数を質問者さんが実装するとしましょう。`sscanf`に渡されてくる変数が、値渡し(call by value)で渡されたものであると、関数内で変更することはできません。ここで、値を呼び出し側の`main`へ変更して返したい場合は、アドレス、つまりポインターで渡すことで(call by reference) `sscanf`関数の中から作用させることができます。これは文字列(`char`型の配列)であろうと、`int`型であろうと、すべて同じことが言えます。
41
+ 立場を変えて、`sscanf`と言う関数を質問者さん自身が実装するを考えてみてください。`sscanf`に渡されてくる変数が、値渡し(call by value)で渡されたものであると、関数内で変更することはできません。ここで、値を呼び出し側の`main`へ変更して返したい場合は、アドレス、つまりポインターで渡すことで(call by reference) `sscanf`関数の中から作用させることができます。これは文字列(`char`型の配列)であろうと、`int`型であろうと、すべて同じことが言えます。