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

回答編集履歴

2

修正

2018/10/18 12:04

投稿

asm
asm

スコア15149

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  ---
10
10
  なお、偶然でしょうけど、**C言語**としては間違ってはいません。
11
11
 
12
- 構造体へのポインタは**C言語の場合**私の知る限りの処理系では先頭要素へのポインタと同値です。
12
+ 構造体へのポインタは**C言語の場合**~~私の知る限りの処理系では~~([N1570 §6.7.2.1p15](https://port70.net/~nsz/c/c11/n1570.html#6.7.2.1p15)で保証されてます)先頭要素へのポインタと同値です。
13
13
  そして、**C言語の場合**ポインタは暗黙の変換を規格上認めています。
14
14
 
15
15
  ただ、tmpbufが先頭要素でなくなった途端によく分からない事がおきるので、明示的にtmpbufを指定した方がよいでしょう。

1

修正

2018/10/18 12:04

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,5 +1,19 @@
1
1
  `warning: passing argument 1 of ‘strcpy’ from incompatible pointer type [-Wincompatible-pointer-types] strcpy(tmp->next,t);`は**警告**であって**エラー**ではありません。
2
2
 
3
3
  ---
4
+ strcpyに渡された第1引数がstrcpyの引数とは非互換とのことなので、
5
+ strcpyの定義を確認すると`char *strcpy(char *s1, const char *s2);`です。
6
+ 渡している`tmp->next`は構造体へのポインタなので`char*`ではありません。
7
+ 渡すべきは`tmp->next->tmpbuf`となります。
4
8
 
9
+ ---
5
- 偶然でしょうけど、C言語としては間違ってはいません。
10
+ なお、偶然でしょうけど、**C言語**としては間違ってはいません。
11
+
12
+ 構造体へのポインタは**C言語の場合**私の知る限りの処理系では先頭要素へのポインタと同値です。
13
+ そして、**C言語の場合**ポインタは暗黙の変換を規格上認めています。
14
+
15
+ ただ、tmpbufが先頭要素でなくなった途端によく分からない事がおきるので、明示的にtmpbufを指定した方がよいでしょう。
16
+
17
+ **ついでに**
18
+ tが`\0`で終わる文字列であることが担保されていませんので
19
+ その状態で`strcpy`を使うのは不適切です。