Вычитание двух строк в C

Вопрос: Ну, я действительно смотрел на strcmp(), был смущен своей работой. В любом случае я написал этот код #include main() { char a[5] = "ggod"; char b[5] = "ggod"; int c = 0; c = b - a; printf("%d value", c); } и я получаю вывод как 16 Может ли кто-нибудь объяснить, почему это

Вопрос:

Ну, я действительно смотрел на 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?

Лучший ответ:

b – объект массива

a также является объектом массива

объект массива является статическим адресом для массива.

поэтому ba – это различие между двумя адресами, а не между двумя строками “ggod” – “ggod”

Если вы хотите сравнить 2 строки, вы можете использовать strcmp()

strcmp() вернет 0, если 2 строки являются одинаковыми и не являются 0, если две строки различны

Ответ №1

То, что вы вычитали, есть не две строки, а две char *. c содержит разность адресов памяти между a и b. Это может быть почти что угодно. Здесь это просто означает, что у вас есть 16-байтовое пространство между началом первой строки и началом второго в вашем стеке.

Ответ №2 c = b — a;

Это арифметика указателя. Массив называет его сам указывает на начальный адрес массива. c удерживайте разницу между двумя точками, которые обозначены b и a. Когда вы напечатаете эти значения с помощью %p вы узнаете в своем случае
если вы печатаете значения, выглядит так: == 0x7fff042f3710 b == 0x7fff042f3720

c= b-a ==>c=0x7fff042f3720-0x7fff042f3710=>c=0x10 //indecimal the value is 16

Попробуйте напечатать эти

printf(«%p %pn»,a,b); c=b-a;

если вы измените размер разности массивов, будет изменено

char a[120]=»ggod»; char b[5]=»ggod»; Ответ №3

b – объект массива

a также является объектом массива

объект массива является статическим адресом для массива.

поэтому ba – это различие между двумя адресами, а не между двумя строками «ggod»-«ggod»

Если вы хотите сравнить 2 строки, вы можете использовать strcmp()

strcmp() вернет 0, если 2 строки являются одинаковыми и не являются 0, если две строки различны

здесь после примера использования strcmp()

Оцените статью
Добавить комментарий