[英]Subtracting two strings in C
好吧,我實際上是在看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
保持a
和b
之間的內存地址差。 這幾乎可以是任意的。 在這里,這只是意味着您的堆棧中第一個字符串的開始和第二個字符串的開始之間有16個字節的空間。
c = b - a;
這是指針算法。 數組名稱本身指向數組的起始地址。 c
保持b
和a
所指向的兩個位置之間的差。 當您使用%p
打印這些值時,您將了解您的情況
如果您打印的值看起來像這樣a == 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";
b
是一個數組對象
a
也是一個數組對象
數組對象是數組的靜態地址。
所以ba
是2個地址之間的"ggod"-"ggod"
而不是2個字符串"ggod"-"ggod"
之間的"ggod"-"ggod"
如果要在2個字符串之間進行比較,可以使用strcmp()
如果兩個字符串相同,則strcmp()
將返回0;如果兩個字符串不同,則將返回非0值
下面是使用strcmp()
的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.