2

好吧,我实际上是在看 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

4

3 回答 3

3

您减去的不是两个字符串,而是两个char *. 保存和c之间的内存地址差。这几乎可以是任意的。在这里,它只是意味着您在堆栈上第一个字符串的开头和第二个字符串的开头之间有 16 个字节的空间。ab

于 2013-09-06T13:37:10.597 回答
2
  c = b - a;

这是指针算法。数组名它自己指向数组的起始地址。保持由和c指向的两个位置之间的差异。当您打印这些值时,您将了解您的情况 是否打印这些值看起来像这样 a==0x7fff042f3710 b==0x7fff042f3720 ba%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";
于 2013-09-06T13:45:14.837 回答
0

b是一个数组对象

a也是一个数组对象

数组对象是数组的静态地址。

b-a两个地址之间的差异也是如此,而不是两个字符串之间的差异"ggod"-"ggod"

如果你想比较两个字符串,你可以使用strcmp()

strcmp()如果 2 个字符串相同,则返回 0,如果 2 个字符串不同,则返回非 0 值

在使用示例之后strcmp()

于 2013-09-06T13:39:01.477 回答