简体   繁体   中英

Compare char input value with array values

I'm fairly new to coding. I am trying to compare char input value with array values, but it seems my code isn't comparing it (correctly) at all.

The code I have so far is:

int main() {
    int colunas = 5;
    int linhas = 6;
    char casa[80];
    char tabela[80][6][5] = {{"a5", "b5", "c5", "d5", "e5", "f5"},
                                      {"a4", "b4", "c4", "d4", "e4", "f4"},
                                      {"a3", "b3", "c3", "d3", "e3", "f3"},
                                      {"a2", "b2", "c2", "d2", "e2", "f2"},
                                      {"a1", "b1", "c1", "d1", "e1", "f1"}};
    scanf("%s", casa); 
      
    for (int i = 0;i< colunas; i++) {
        for (int j = 0;j < linhas; j++) {
            printf("%s",tabela[i][j]);

            // Problem happens here.
            if (casa == tabela[j][i]) {
                printf("Verdade");
            }
        }
        
        printf("\n"); 
    }
    printf("%s", casa);

    return 0;
}

Because C doesn't really have a string type, but instead a arrays of characters, the == will not work like it would with C++'s std::string or Rust's std::string::String.
Whats actually happening when you use == with arrays of characters, is that the arrays "decay" into pointers, and the == operator is actually just saying "is the memory location of casa the same memory location as tabela[j][i] "?
What you should do is use the standard library function strcmp (if you can, use strncmp as using strcmp can result in code vulnerabilities).
So instead of:

if (casa == tabela[j][i]) { /* CODE*/ }

do:

if (strcmp(casa, tabela[j][i]) == 0) { /* CODE*/ }

or even better:

if (strncmp(casa, tabela[j][i], 80) == 0) { /* CODE*/ }

You can find the man pages online for strncmp/strcmp and such online by just searching "foo man page" (where foo is obviously replaced with strncmp or something like that).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM