C语言中关于字符串的问题
发布网友
发布时间:2022-04-20 12:14
我来回答
共6个回答
热心网友
时间:2022-04-20 13:43
注意这里是调用函数,也可以认为是一种复杂的表达式运算。
strcmp函数所起到的作用是判断两字符串的长度是否想等,具体怎么实现是它的函数代码的事,如果实在要了解的话,我可以把源代码写出来。
strcmp需要两个参数,他们都是地址值,有这个的话就可以知道两字符串的位置,例如"bbb" 和"ccc"的位置,buf1 = "aaa"只把字符串"aaa"的首字母a的内存地址赋给了字符指针buf1,这样对buf1间接访问运算得,*buf1=='a',而容易理解一个字符串的字符在内存中都是依次
存储的,那么利用*(buf1+1)就可读到下一个'a'。这涉及到指针的运算。
这里还要说明一个问题,
当printf("%s",bufi);执行后,输出为aaa
当你想过吗,为什么不是aa或a,因为按照前面的说法并没有什么内在机制使得输出aaa的,所以要提到结束符'\0',他是用来标记字符串结束的,当计算机读到它时就知道字符串结束了,说是"aaa"其实存储的时候是"aaa'\0'",这个‘\0’也是个字符,这是编译自动加上去的。
那么再结合字符的ASCLL码中‘\0’在一般字符中是最小的,就是0,就可以判断字符串的长度了。
你自己多理解,希望能帮助到你,要这个函数源代码的话网上好多下的到的。
热心网友
时间:2022-04-20 15:01
有关系的是,strcmp参数类型而已。
如果参数类型满足不就可以了吗?这是调用函数的啊
热心网友
时间:2022-04-20 16:36
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
这是strcmp源代码,能看明白了吧!通过地址取出对应地址对应的内容,然后再比较:)
热心网友
时间:2022-04-20 18:27
*buf1 *buf2 是两个字符串,buf1和buf2是把两个字符串首地址传过去,然后再对*buf1和*buf2进行比较。
热心网友
时间:2022-04-20 20:35
怎么会呢?
在声明变量buf1、buf2、buf3时系统已经分别让它们三个指向不同的地址,而在这三个不同地址里分别存放了aaa,bbb,ccc三个字符串。因此比较语句是正确的。
即便写成ptr = strcmp(buf2, buf2);也是正确的,相当于把buf2自己跟自己比较了一次,不过这就没什么意义了,结果肯定是0.
热心网友
时间:2022-04-20 23:00
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
上述定义的同时已经给三个变量分配不同的地址了
所以这个问题就这样,lz不用深追究了,它们可以比较的