回答編集履歴

2

修正

2018/10/18 12:04

投稿

asm
asm

スコア15147

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- 構造体へのポインタは**C言語の場合**私の知る限りの処理系では先頭要素へのポインタと同値です。
23
+ 構造体へのポインタは**C言語の場合**~~私の知る限りの処理系では~~([N1570 §6.7.2.1p15](https://port70.net/~nsz/c/c11/n1570.html#6.7.2.1p15)で保証されてます)先頭要素へのポインタと同値です。
24
24
 
25
25
  そして、**C言語の場合**ポインタは暗黙の変換を規格上認めています。
26
26
 

1

修正

2018/10/18 12:04

投稿

asm
asm

スコア15147

test CHANGED
@@ -4,6 +4,34 @@
4
4
 
5
5
  ---
6
6
 
7
+ strcpyに渡された第1引数がstrcpyの引数とは非互換とのことなので、
8
+
9
+ strcpyの定義を確認すると`char *strcpy(char *s1, const char *s2);`です。
10
+
11
+ 渡している`tmp->next`は構造体へのポインタなので`char*`ではありません。
12
+
13
+ 渡すべきは`tmp->next->tmpbuf`となります。
7
14
 
8
15
 
16
+
17
+ ---
18
+
9
- 偶然でしょうけど、C言語としては間違ってはいません。
19
+ なお、偶然でしょうけど、**C言語**としては間違ってはいません。
20
+
21
+
22
+
23
+ 構造体へのポインタは**C言語の場合**私の知る限りの処理系では先頭要素へのポインタと同値です。
24
+
25
+ そして、**C言語の場合**ポインタは暗黙の変換を規格上認めています。
26
+
27
+
28
+
29
+ ただ、tmpbufが先頭要素でなくなった途端によく分からない事がおきるので、明示的にtmpbufを指定した方がよいでしょう。
30
+
31
+
32
+
33
+ **ついでに**
34
+
35
+ tが`\0`で終わる文字列であることが担保されていませんので
36
+
37
+ その状態で`strcpy`を使うのは不適切です。