在C中减去两个字符串

时间:2013-09-06 13:32:41

标签: c arrays string character-arrays

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

  c = b - a;

这是指针算术。它自己指向数组的起始地址的数组名称。 c保留ba指向的两个位置之间的差异。 当您使用%p打印这些值时,您将了解您的情况 如果你打印的值看起来像这样一个== 0x7fff042f3710 b == 0x7fff042f3720

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

答案 2 :(得分:0)

b是一个数组对象

a也是一个数组对象

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

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

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

如果2个字符串相同,

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

此处使用strcmp()

的示例