在 C 语言中减去两个字符串

在 C 语言中减去两个字符串

好吧,我实际上正在查看 strcmp(),对它的工作原理感到困惑。无论如何,我写了这段代码

#include<stdio.h>

    main()

    {


            char a[5]="ggod";
            char b[5]="ggod";

            int c=0;

            c=b-a;

            printf("%d  value",c);

    }

我得到了

 output as 16 

谁能解释为什么是 16 ?

答案1

请记住,与 C++、Java 或其他高级语言相反,C 中不存在字符串数据类型,大多数字符串仅由字符数组表示。数组的变量名只是指向数组开头的指针。

您在示例中所做的实际上是a从指向的指针中减去指向的指针b,然后将结果(指针)值转换为整数。我不知道为什么返回值为 -16。这可能只是堆栈上一次分配的内存块的大小(注意,纯属猜测)。

为了从彼此中减去字符,您必须真正访问它们,要么使用a[i],要么访问char 数组中的*(a+i)第 i个字符。

顺便说一句,指针减法的值不是随机的,而是或多或少任意的,因为数组的地址a[]可能b[]因操作系统和编译器而异。我刚刚在我目前使用的 PC Debian Wheezy 64 位上尝试了您的程序,结果是 -16。然后我在 Xubuntu 12.04 32 位上尝试了相同的代码,结果是 5。

答案2

您计算指针值的差。我猜 *b 在 *a 之后 16 个字节开始。

相关内容