2010-11-29 3 views
0

Je veux comparer entre deux char * donc je le fais avec strcmp, regardez, en mode de débogage, les deux char * dans strcmp obtient la même valeur et toujours retour coutume 0, et il saute par-dessus la condition if() au lieu d'y entrer:#c strcmp() ne fonctionne pas comme il se doit

ici pic du débogueur: http://img405.imageshack.us/img405/5218/111fi.jpg

Company FindCompany(CompanyL pcompanyList, int companyIdentityDigit) 
{ 
    Company companyFound; 
    char *psearchWord; 
    psearchWord = (char*)malloc(10*sizeof(char)); 

    switch(companyIdentityDigit) { 
     case 0: 
      strcpy(psearchWord , "Pelephone"); 
      break; 
     case 2: 
      strcpy(psearchWord , "Cellcom"); 
      break; 
     case 4: 
      strcpy(psearchWord , "Orange"); 
      break; 
    } 

    while(pcompanyList->next != NULL) { 
     if(strcmp(pcompanyList->thisCompany->pcompany , psearchWord) == 0) { 
      free(psearchWord); 
      return pcompanyList->thisCompany; 
     } 
     pcompanyList = pcompanyList->next; 
    } 
    free(psearchWord); 
    return NULL; 
} 

pourquoi est-il ??

+0

Avec quelles valeurs l'appelez-vous. –

+0

Les cordes sont-elles définitivement à la fois ASCII? Êtes-vous sûr que les octets après les m dans Cellcom sont tous les deux nulls? – jtdubs

+0

james droit ... je vais le réparer, mais ce n'est pas le problème –

Répondre

0

Essayez une simple boucle pour imprimer les caractères pcompanyList-> thisCompany-> pcompany un à la fois:

for (int x = 0; x < strlen(pcompanyList->thisCompany->pcompany); x++) 
    printf("%c ", pcompanyList->thisCompany->pcompany[x]); 

Vous pouvez faire ceci ou vérifier la longueur de chaque chaîne pour vous assurer qu'il aren 't les caractères cachés qui n'apparaissent pas dans le débogueur lorsque vous vérifiez les chaînes.

Questions connexes