検索

ホームページ  >  に質問  >  本文

c++ - strcmp参数为char**,也能正常运行?

strcmp 函数库中的声明:

int __cdecl strcmp (
        const char * src,
        const char * dst
        )
#include<string.h>
#include<stdio.h>
 
int main( void )
{
      char *s1 = "abcdkkkd";
      char *s2 = "oefjeofjefo";
  
      printf( "%d", strcmp( &s1, &s2 ) );
  
      return 0;
}

程序为什么会正常运行?

迷茫迷茫2835日前722

全員に返信(4)返信します

  • 天蓬老师

    天蓬老师2017-04-17 14:25:29

    int strcmp( const char *lhs, const char *rhs );
    関数宣言、c99 は c11 と若干異なりますが、影響はありません。

    渡されるのはポインタです。文字列変数が渡されたとしても、それはアドレスです。

    は、ポインター アドレスから始まる文字列をヌル文字 と比較します。

    ご質問に関して、実際には 比较的并不是你列出的两个字符串而是地址开始的字符串 は、このアドレスが最初は文字列ではないと考えるかもしれません。その後、C は空の文字列が見つかるまでメモリ内をさらに検索します。

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 14:25:29

    vs2015 で試してみたところ、エラーが発生しました: 「char* 型の実パラメータは const char 型の仮パラメータと互換性がありません」

    返事
    0
  • PHPz

    PHPz2017-04-17 14:25:29

    コンパイルしませんでした。プロンプト<。>。しかし、元のポスター、あなた、渡されたパラメーターは、文字列のアドレスではありません!変数のアドレスを渡します。 error: cannot convert 'const char**' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'は<不>と同じではありません! s1

    返事
    0
  • 迷茫

    迷茫2017-04-17 14:25:29

    Gcc のコンパイル結果は次のとおりです:
    strcmp.c:9:5: 警告: 互換性のないポインタ型から 'strcmp' の引数 1 を渡しています [デフォルトで有効]
    コンパイルをパスしただけです。に渡されたのはすべてアドレスであるため、警告のみが報告されますが、実際の実行結果は依然として間違っています。

    返事
    0
  • キャンセル返事