2

ええと、私は実際に 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か?

4

3 に答える 3

3

差し引いたものは、2 つの文字列ではなく、2 つのchar *. cと の間のメモリ アドレスの差を保持しaますb。これはほとんど任意です。ここでは、スタックの最初の文字列の開始点と 2 番目の文字列の開始点の間に 16 バイトのスペースがあることを意味します。

于 2013-09-06T13:37:10.597 に答える
2
  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";
于 2013-09-06T13:45:14.837 に答える
0

b配列オブジェクトです

aも配列オブジェクトです

配列オブジェクトは、配列への静的アドレスです。

b-a2 つの文字列間の違いではなく、2 つのアドレス間の違いも同様です。"ggod"-"ggod"

2つの文字列を比較したい場合は、使用できますstrcmp()

strcmp()2 つの文字列が同じ場合は 0 を返し、2 つの文字列が異なる場合は 0 以外の値を返します。

ここで使用例の後strcmp()

于 2013-09-06T13:39:01.477 に答える