回答編集履歴

2

memsetの長さも間違っていた

2020/06/03 04:14

投稿

ponpoko1968
ponpoko1968

スコア84

test CHANGED
@@ -1,18 +1,6 @@
1
- > buf = (char *)malloc(24);
2
-
3
-
4
-
5
- この処理で引数で渡されたbufを上書きしているからですね。
6
-
7
-
8
-
9
- ポインタへのポインタを渡さないとやりたいことは出来ないと思います。
10
-
11
-
12
-
13
1
  ```
14
2
 
15
- #include <stdio.h>
3
+ #Include <stdio.h>
16
4
 
17
5
  #include <stdlib.h>
18
6
 
@@ -26,9 +14,11 @@
26
14
 
27
15
  char *src = "TEST\n";
28
16
 
29
- *buf = (char *)malloc(strlen(src)+1); // main()で宣言したポインタ領域にmallocで確保した領域へのアドレスを代入します。
17
+ size_t len = strlen(src);
30
18
 
19
+ *buf = (char *)malloc(len);
20
+
31
- memset(*buf, 0, 20);
21
+ memset(*buf, 0, len);
32
22
 
33
23
  sprintf(*buf, "%s", src);
34
24
 
@@ -42,7 +32,7 @@
42
32
 
43
33
  {
44
34
 
45
- char *dst; // ここで用意されるのは、charへのポインタ1つぶんの領域がスタック上に確保されるだけです。
35
+ char *dst;
46
36
 
47
37
  int ret;
48
38
 
@@ -60,6 +50,4 @@
60
50
 
61
51
  }
62
52
 
63
-
64
-
65
53
  ```

1

オーバーランしてました

2020/06/03 04:14

投稿

ponpoko1968
ponpoko1968

スコア84

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  char *src = "TEST\n";
28
28
 
29
- *buf = (char *)malloc(strlen(src)); // main()で宣言したポインタ領域にmallocで確保した領域へのアドレスを代入します。
29
+ *buf = (char *)malloc(strlen(src)+1); // main()で宣言したポインタ領域にmallocで確保した領域へのアドレスを代入します。
30
30
 
31
31
  memset(*buf, 0, 20);
32
32