На самом деле я смотрел на 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?
Помните, что в C, в отличие от C ++, Java или других языков высокого уровня, не существует строкового типа данных, и большинство строк просто представлено массивами символов. Имя переменной массива - это просто указатель на начало массива.
То, что вы делаете в своем примере, фактически вычитает указатель на a
из указателя на b
, а затем преобразует это результирующее (указатель) значение в целое число. Почему возвращаемое значение -16, я не знаю. Вероятно, это просто размер блоков памяти в стеке, которые выделяются одновременно (будьте осторожны, чистые предположения).
Чтобы вычесть символы друг из друга, вы должны действительно получить к ним доступ, используя a[i]
или *(a+i)
для символа i th sup> в массиве char.
К сведению, значение вычитания указателя не является случайным, а более или менее произвольным, поскольку адреса массивов a[]
и b[]
могут различаться в разных ОС и в разных компиляторах. Я только что попробовал вашу программу на ПК, на котором я сейчас нахожусь, Debian Wheezy 64 bit, и результат равен -16. Затем я попробовал тот же код на Xubuntu 12.04 32bit, и результат 5.
Вы рассчитываете разницу значений указателя. Я думаю, * b начинает 16 байтов после * a.