簡體   English   中英

用C減去兩個字符串

[英]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保持ab之間的內存地址差。 這幾乎可以是任意的。 在這里,這只是意味着您的堆棧中第一個字符串的開始和第二個字符串的開始之間有16個字節的空間。

  c = b - a;

這是指針算法。 數組名稱本身指向數組的起始地址。 c保持ba所指向的兩個位置之間的差。 當您使用%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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM