![在 C 语言中减去两个字符串](https://linux22.com/image/841771/%E5%9C%A8%20C%20%E8%AF%AD%E8%A8%80%E4%B8%AD%E5%87%8F%E5%8E%BB%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
好吧,我实际上正在查看 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 个字节开始。