ええと、私は実際に strcmp() を見ていましたが、その動作について混乱していました。とにかく、私はこのコードを書きました
#include <stdio.h>
main()
{
char a[5] = "ggod";
char b[5] = "ggod";
int c = 0;
c = b - a;
printf("%d value", c);
}
そして、私は出力を次のように取得します
16
誰でも説明できます16か?
ええと、私は実際に strcmp() を見ていましたが、その動作について混乱していました。とにかく、私はこのコードを書きました
#include <stdio.h>
main()
{
char a[5] = "ggod";
char b[5] = "ggod";
int c = 0;
c = b - a;
printf("%d value", c);
}
そして、私は出力を次のように取得します
16
誰でも説明できます16か?
差し引いたものは、2 つの文字列ではなく、2 つのchar *. cと の間のメモリ アドレスの差を保持しaますb。これはほとんど任意です。ここでは、スタックの最初の文字列の開始点と 2 番目の文字列の開始点の間に 16 バイトのスペースがあることを意味します。
c = b - a;
これはポインター演算です。配列名自体は、配列の開始アドレスを指します。とcで示される 2 つの位置の差を保持します。これらの値を印刷すると、値を次のように印刷すると、ケースで知ることができます
a==0x7fff042f3710 b==0x7fff042f3720 ba%p
c= b-a ==>c=0x7fff042f3720-0x7fff042f3710=>c=0x10 //indecimal the value is 16
それらを印刷してみてください
printf("%p %p\n",a,b);
c=b-a;
配列の違いのサイズを変更すると、変更されます
char a[120]="ggod";
char b[5]="ggod";
b配列オブジェクトです
aも配列オブジェクトです
配列オブジェクトは、配列への静的アドレスです。
b-a2 つの文字列間の違いではなく、2 つのアドレス間の違いも同様です。"ggod"-"ggod"
2つの文字列を比較したい場合は、使用できますstrcmp()
strcmp()2 つの文字列が同じ場合は 0 を返し、2 つの文字列が異なる場合は 0 以外の値を返します。
ここで使用例の後strcmp()