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

【字号: 日期:2023-04-22浏览:28作者:雯心

问题描述

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;}

程序为什么会正常运行?

问题解答

回答1:

int strcmp( const char *lhs, const char *rhs );函数声明,c99 跟c11 略有差别,但不影响。

传入的就是指针,即使传入字符串变量,其实也还是一个地址。

比较的是从指针地址开始到空字符 0之间的字符串。

针对你的问题,其实比较的并不是你列出的两个字符串,而是地址开始的字符串,也许你会觉得这个地址开始不是字符串,那么C 自己在内存中往后找,直到遇到空字符串。

回答2:

在vs2015上试过,报错:“char*类型的实参与const char类型的的形参不兼容”

回答3:

我没编译通过啊。提示 error: cannot convert ’const char**’ to ’const char*’ for argument ’1’ to ’int strcmp(const char*, const char*)’。但是楼主你,传入的参数并不是那个字符串的地址啊!你传入的是变量的地址啊。s1和&s1是不一样的!

回答4:

Gcc编译结果如下:strcmp.c:9:5: warning: passing argument 1 of ‘strcmp’ from incompatible pointer type [enabled by default]你那只是编译通过了,因为传入的都是地址,所以只报了warning而已,但实际上运行结果还是错误的。

相关文章: