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

На самом деле я смотрел на 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?

-2
задан 24 January 2014 в 19:59

2 ответа

Помните, что в C, в отличие от C ++, Java или других языков высокого уровня, не существует строкового типа данных, и большинство строк просто представлено массивами символов. Имя переменной массива - это просто указатель на начало массива.

То, что вы делаете в своем примере, фактически вычитает указатель на a из указателя на b, а затем преобразует это результирующее (указатель) значение в целое число. Почему возвращаемое значение -16, я не знаю. Вероятно, это просто размер блоков памяти в стеке, которые выделяются одновременно (будьте осторожны, чистые предположения).

Чтобы вычесть символы друг из друга, вы должны действительно получить к ним доступ, используя a[i] или *(a+i) для символа i th в массиве char.

К сведению, значение вычитания указателя не является случайным, а более или менее произвольным, поскольку адреса массивов a[] и b[] могут различаться в разных ОС и в разных компиляторах. Я только что попробовал вашу программу на ПК, на котором я сейчас нахожусь, Debian Wheezy 64 bit, и результат равен -16. Затем я попробовал тот же код на Xubuntu 12.04 32bit, и результат 5.

0
ответ дан 24 January 2014 в 19:59

Вы рассчитываете разницу значений указателя. Я думаю, * b начинает 16 байтов после * a.

0
ответ дан 24 January 2014 в 19:59

Другие вопросы по тегам:

Похожие вопросы: