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; }
程序为什么会正常运行?
业精于勤,荒于嬉;行成于思,毁于随。
int strcmp( const char *lhs, const char *rhs );関数宣言、c99 は c11 と若干異なりますが、影響はありません。
int strcmp( const char *lhs, const char *rhs );
渡されるのはポインタです。文字列変数が渡されたとしても、それはアドレスです。
は、ポインター アドレスから始まる文字列をヌル文字
vs2015 で試してみたところ、エラーが発生しました: 「char* 型の実パラメータは const char 型の仮パラメータと互換性がありません」
コンパイルしませんでした。プロンプト。しかし、元のポスター、あなた、渡されたパラメーターは、文字列のアドレスではありません!変数のアドレスを渡します。 error: cannot convert 'const char**' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'はと同じではありません! s1
error: cannot convert 'const char**' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'
s1
Gcc のコンパイル結果は次のとおりです: strcmp.c:9:5: 警告: 互換性のないポインタ型から 'strcmp' の引数 1 を渡しています [デフォルトで有効]コンパイルをパスしただけです。に渡されたのはすべてアドレスであるため、警告のみが報告されますが、実際の実行結果は依然として間違っています。
int strcmp( const char *lhs, const char *rhs );
関数宣言、c99 は c11 と若干異なりますが、影響はありません。
渡されるのはポインタです。文字列変数が渡されたとしても、それはアドレスです。
は、ポインター アドレスから始まる文字列をヌル文字
vs2015 で試してみたところ、エラーが発生しました: 「char* 型の実パラメータは const char 型の仮パラメータと互換性がありません」
コンパイルしませんでした。プロンプト。しかし、元のポスター、あなた、渡されたパラメーターは、文字列のアドレスではありません!変数のアドレスを渡します。
error: cannot convert 'const char**' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'
はと同じではありません!s1
Gcc のコンパイル結果は次のとおりです:
strcmp.c:9:5: 警告: 互換性のないポインタ型から 'strcmp' の引数 1 を渡しています [デフォルトで有効]
コンパイルをパスしただけです。に渡されたのはすべてアドレスであるため、警告のみが報告されますが、実際の実行結果は依然として間違っています。