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

回答編集履歴

6

2016/11/01 15:57

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  いいえ、違います。引数としては別に異なる長さの文字列2つでも良いです。たとえばs1とS2が全て等しい場合、S1の要素が\0の時、S2の要素も\0となり、その時は文字列数も同じで retuern 0
4
4
  つまりstrcmpの文字列が等しいときの戻り値0になります。
5
- しかし要素数が等しくない場合でも先にどちらかの文字終端\0がでてきた時点で*s1==*s2が満たせずwhile文をけるので問題なし
5
+ しかし要素数が等しくない場合でも先にどちらかの文字終端\0がでてきた時点で*s1==*s2が満たせずwhile文をけるので問題なし
6
6
 
7
7
  > ②最後のreturnでunsigned charにキャストしている理由がわかりません。
8
8
 

5

a

2016/11/01 15:57

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > ①*s1=='\0'が成り立つことでで二つの文字列が等しいとしていますが、これはs1とs2の要素数が同じであることを前提としているのですか?
2
2
 
3
- いいえ、違います。引数としては別に異なる長さの文字列2つでも良いです。たとえばs1とS2が全て等しい場合、S1の要素が/0の時、S2の要素も/0となり、その時は文字列数も同じで retuern 0
3
+ いいえ、違います。引数としては別に異なる長さの文字列2つでも良いです。たとえばs1とS2が全て等しい場合、S1の要素が\0の時、S2の要素も\0となり、その時は文字列数も同じで retuern 0
4
4
  つまりstrcmpの文字列が等しいときの戻り値0になります。
5
5
  しかし要素数が等しくない場合でも先にどちらかの文字終端\0がでてきた時点で*s1==*s2が満たせずwhile文をぶけるので問題なし
6
6
 

4

補足

2016/11/01 15:31

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -13,4 +13,8 @@
13
13
  たとえば(unsigned char)*s1 - (unsigned char)*s2が200の時
14
14
  (signed char)*s1 - (signed char)*s2は−56になる(たぶん)
15
15
 
16
- 本来S1>S2として結果をかえしたいのに、S1<S2となってしまう。
16
+ 本来S1>S2として結果をかえしたいのに、S1<S2となってしまう。
17
+
18
+ ###補足
19
+
20
+ 回答を終わって他の回答者様の回答の1の方をみてぎょっとしましたので、そこだけほそく、*S1==\0だけでS2のほうは評価していないのに、等しいと判断しているのはwhile文の*S1==*S2がなりたっているからで、それは要素数が同じ前提という事です、私が違いますといったのは、strcmpは2つの文字列が同じ要素数しか受け付けないわけではないという意味での「違います」です。

3

修正

2016/11/01 15:30

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  いいえ、違います。引数としては別に異なる長さの文字列2つでも良いです。たとえばs1とS2が全て等しい場合、S1の要素が/0の時、S2の要素も/0となり、その時は文字列数も同じで retuern 0
4
4
  つまりstrcmpの文字列が等しいときの戻り値0になります。
5
- しかし要素数が等しくない場合でも先にどちらかの文字終端\0がでてきた時点でwhile文をぶけるので問題なし
5
+ しかし要素数が等しくない場合でも先にどちらかの文字終端\0がでてきた時点で*s1==*s2が満たせずwhile文をぶけるので問題なし
6
6
 
7
7
  > ②最後のreturnでunsigned charにキャストしている理由がわかりません。
8
8
 

2

修正

2016/11/01 15:26

投稿

hiim
hiim

スコア1689

answer CHANGED
File without changes

1

修正

2016/11/01 15:25

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > ①*s1=='\0'が成り立つことでで二つの文字列が等しいとしていますが、これはs1とs2の要素数が同じであることを前提としているのですか?
2
2
 
3
- いいえ、違います。たとえばs1とS2が全て等しい場合、S1の要素が/0の時、S2の要素も/0となり、retuern 0
3
+ いいえ、違います。引数としては別に異なる長さの文字列2つでも良いです。たとえばs1とS2が全て等しい場合、S1の要素が/0の時、S2の要素も/0となり、その時は文字列数も同じで retuern 0
4
4
  つまりstrcmpの文字列が等しいときの戻り値0になります。
5
5
  しかし要素数が等しくない場合でも先にどちらかの文字終端\0がでてきた時点でwhile文をぶけるので問題なし
6
6