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