好吧,我实际上是在看 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
?
好吧,我实际上是在看 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
?
您减去的不是两个字符串,而是两个char *
. 保存和c
之间的内存地址差。这几乎可以是任意的。在这里,它只是意味着您在堆栈上第一个字符串的开头和第二个字符串的开头之间有 16 个字节的空间。a
b
c = b - a;
这是指针算法。数组名它自己指向数组的起始地址。保持由和c
指向的两个位置之间的差异。当您打印这些值时,您将了解您的情况
是否打印这些值看起来像这样 a==0x7fff042f3710 b==0x7fff042f3720 b
a
%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";
b
是一个数组对象
a
也是一个数组对象
数组对象是数组的静态地址。
b-a
两个地址之间的差异也是如此,而不是两个字符串之间的差异"ggod"-"ggod"
如果你想比较两个字符串,你可以使用strcmp()
strcmp()
如果 2 个字符串相同,则返回 0,如果 2 个字符串不同,则返回非 0 值
在使用示例之后strcmp()