Subtraindo duas strings em C [closed]

-2

Bem, eu estava realmente olhando para strcmp (), estava confuso sobre o seu funcionamento. De qualquer forma eu escrevi este código

#include<stdio.h>

    main()

    {


            char a[5]="ggod";
            char b[5]="ggod";

            int c=0;

            c=b-a;

            printf("%d  value",c);

    }

e eu obtenho o

 output as 16 

Alguém pode explicar Por que são 16?

    
por Neetz 06.09.2013 / 15:22

2 respostas

2

Lembre-se de que, em C, oposto a C ++, Java ou outras linguagens de alto nível, não existe nenhum tipo de dados de string e a maioria das strings é representada apenas por arrays de caracteres. O nome da variável de uma matriz é simplesmente o ponteiro para o início da matriz.

O que você está fazendo no seu exemplo é, na verdade, subtrair o ponteiro para a do ponteiro para b e, em seguida, converter esse valor resultante (ponteiro) em um inteiro. Por que o valor retornado é -16 não sei. Provavelmente isso é apenas o tamanho dos blocos de memória na pilha que são alocados de uma vez (cuidado, pura especulação).

Para subtrair caracteres um do outro, você precisa realmente acessá-los, usando a[i] ou *(a+i) para o caracter i th na matriz char.

Fyi, o valor da subtração do ponteiro não é aleatório, mas mais ou menos arbitrário, pois os endereços das matrizes a[] e b[] podem diferir de SO para SO e de compilador para compilador. Eu apenas tentei o seu programa no PC que eu estou atualmente, o Debian Wheezy 64 bit, e o resultado é -16. Então eu tentei o mesmo código no Xubuntu 12.04 32bit e o resultado é 5.

    
por soulsource 06.09.2013 / 15:51
1

Você calcula a diferença de valores de ponteiro. Eu acho que * b começa 16 bytes depois de * a.

    
por tpf 06.09.2013 / 15:51