Por exemplo, o programa abaixo não funciona. Sabe porquê ? (eu não sei explicar....)
#include "stdafx.h"
int main(int argc, char* argv[])
{
char senha[7] = "Valdir" ;
char outrasenha[7] = "Valdir" ;
if (senha == outrasenha)
{
// nunca entra aqui...porquê ???
printf("Vc ACERTOU a senha \n");
}
else
{
printf("vc ERROU a senha..\n");
}
return 0;
}
Mas se usar a função STRCMP funciona bem... coisas de C. Fica assim:
#include "stdafx.h"
#include
int main(int argc, char* argv[])
{
char senha[7] = "Valdir" ;
char outrasenha[7] = "Valdir" ;
if (strcmp(senha,outrasenha) == 0)
{
printf("Vc ACERTOU a senha \n");
}
else
{
printf("vc ERROU a senha..\n");
}
return 0;
}
3 comentários:
Grande Tchê!! Não tinha visto esse seu post. O motivo porque a comparação das duas strings não dá verdadeiro nunca é porque um array de char sempre em C sempre é um ponteiro. O conteúdo de senha e outrasenha não está sendo comparado. O que está sendo comparado é a primeira posição de memória do array. Como os dois foram colocados em posições distintas de memória, nunca vão ser iguais. Se você tivesse igualado senha = outrasenha aí teria dado certo porque os dois ponteiros apontam para o mesmo endereço. É isso aí. Gostei desse post. Abraços.
Puxa, Juli, é verdade... eu tinha esquecido desse 'detalhe', porém importante. De fato ele está comparando somente a posição que o ponteiro aponta. Esse tipo de coisa tráz alguns problemas, como por exemplo, quando voce passa uma matriz por valor para uma função e não por referencia, apesar de 'parecer' ser por valor, acaba sendo por referencia, porque ele envia um ponteiro, e não copia valor a valor da matriz. Obrigado pela solução do enigma!!!
É verdade. Essa armadilha que citaste é uma bem perigosa mesmo. Aí o cara altera a matriz quando não quer ou deixa intacta quando queria alterar. É uma confusão. Arrays são passados byref por default porque fica mais rápido e mais fácil passar só o ponteiro em vez de copiar todo o conteúdo do array. Dependendo do tamanha do array pode haver um forte impacto no desempenho.
Postar um comentário