Strings (linguagem C)

char *str1 = "bla";
char *str2 = "bla";

printf("%d", str1 == str2);

pq dá 1? como pode se tratar do mesmo endereço?
Explicações, por favor. :slight_smile:

Posso estar falando besteira,

mas quando você faz *variavel, você está se referindo ao valor daquela posição de memória, portanto:

char *str1 = "bla";  
char *str2 = "bla";  
  
printf("%d", str1 == str2);  

Retorna verdadeiro, dessa forma, imprimirá 1, por que *str1 == *str2, agora se quiser fazer referencia a posição de memória, deveria ser &variavel, não é isso?

[]'s

Estou no Windows, sem DevC++ :twisted:, não tenho como testar…

Poderia ser testado assim:

printf("%s",*str1)
printf("%s",*str2);

… os dois devem imprimir: “bla”, senão, falei besteira

falou!

Não sei bem em C, mas pesquisei aqui e entendi o seguinte…

0 = true
1 = false

entao como temos 2 variáveis e ponteiros para posições diferentes de memória retornará 1.

strcmp(str1, str2) é um função responsavel pela comparação retornando 0 são iguais, caso contrário são diferentes

1 = true
0 = false

não é diegohsi ?

verdadeiro e falso? :smiley:

[]'s

não

caracas! hehe

[quote]Posso estar falando besteira,

mas quando você faz *variavel, você está se referindo ao valor daquela posição de memória… [/quote]

Quando faço:

char *str1 = "bla"; char *str2 = "bla";

Estou declarando e inicializando dois ponteiros para char.

Perdão, mas do jeito que eu entendi, isso não faz muito sentido.
Veja bem, na minha pergunta eu estou comparando dois ponteiros para char.
Se o código fosse:

Estaríamos comparando os char’s em si, o que também resultaria em 1, já que *str1 = *str2 = ‘b’.

[quote]printf("%s",*str1) printf("%s",*str2);[/quote]

Perdão novamente, mas isso nem sequer deve compilar…
Como dito antes, *str1 e *str2 são char’s, não cadeias de char’s.

imprimir verdadeiro, 1:

#include<stdio.h>
int main(){
    char *str1 = "b";  
    char *str2 = "b";  
    printf("%c\n%c",*str1,*str2);
    printf("%d", str1 == str2);
    system("pause");
    return 0;
}

imprimir falso, 0:

#include<stdio.h>
int main(){
    char *str1 = "c";  
    char *str2 = "b";  
    printf("%c\n%c",*str1,*str2);
    printf("%d", str1 == str2);
    system("pause");
    return 0;
}

Não sei se no java verdadeiro é falso, hehe

Mas aqui deu certo.

Exato, por isso peguei só o primeiro caracter! Caso contrario deveria-se declarar um vetor de caracteres!

[quote]Não sei bem em C, mas pesquisei aqui e entendi o seguinte…

0 = true
1 = false [/quote]

O amigo está enganado.

1 = true
0 = false

No caso, temos dois ponteiros para posições iguais, creio.
É exatamente aí que está a minha dúvida: como posso ter declarado e inicializado duas cadeias diferentes e elas apontarem pro mesmo lugar só por terem conteúdos iguais?

strcmp é uma função que compara conteúdos de duas cadeias, que não é o caso aqui, onde estamos comparando ponteiros.

boa…

Esse é do mestre!

Coordenador das olimpiadas de programação de Santos.

Sr. Ciro Cirne Trindade.

[]'s

Citando e comentando o código do amigo:

#include<stdio.h> int main(){ char *str1 = "b"; char *str2 = "b"; printf("%c\n%c",*str1,*str2); // aqui ele compara os dois conteúdos, logo é natural imprimir 1, o que não tem absoulutamente nada a ver com a minha pergunta hehe printf("%d", str1 == str2); // aqui ele compara os ponteiros, [b]perceba[/b], aqui está minha dúvida, vc declarou e inicializou duas cadeias de caracteres diferentes de conteúdos iguais, mas mesmo assim o programa retorna 1, mostrando que str1 e str2 ocupam posições de memória iguas. Como pode? =] system("pause"); return 0; }

Entendi, hehe

Mas é seis por meia duzia: str == *str, é isso?

Posições iguais no espaço? hehe

Não é contra a lei de um malandro ai?

kkkk

[quote=getAdicted]Entendi, hehe

Mas é seis por meia duzia: str == *str, é isso?

[/quote]

Não… Veja bem, str se refere a um ponteiro, uma posição de memória.

Enquanto *str se refere ao conteúdo referenciado por esse ponteiro, no caso do código supracitado, um char.

str e *str são duas coisas diferentes no nosso código.

Exatamente o que o programa dá a entender…
E a razão desse tópico.
Saber pq str1 e str2 tratam do mesma posiçõa de memória. :wink:

Mesmo valor, posições de memória diferentes.


Valeu! Valeu!

bacana isso!