Προς το περιεχόμενο

c++ aporia - char matrix


nodreams.ct

Προτεινόμενες αναρτήσεις

Δημοσ.

<pre><font class="small">code:</font><hr>

#include <iostream.h>

 

void main(void)

{

int i;

char cmd[10];

cin >>cmd;

if (cmd=="test")

cout<< "douleuei :D";

else cout<< "den douleuei! ;(";

}

</pre><hr>

 

Μπορει να μου πει καποιος γιατι οταν γραφω test εξακολουθει να γράφει "δεν δουλεύει"???

 

Ευχαριστώ!

Δημοσ.

θέλει : if (strcmp(cmd,"test")==0)

το cmd και το "test" στην c είναι pointers

δηλ. οταν γραφεις "test", o compiler γραφει "test" κάπου στην μνήμη και σου επιστρέφει τον pointer στην θέση αυτή που βέβαια είναι διαφορετικός από τον pointer cmd, άσχετα αν το περιεχόμετνο του cmd είναι "test"

Στην c τα string χειρίζονται με pointers. Όταν γράφεις

if (cmd=="test") συγρίνεις pointers όχι τα περιεχόμενα των pointers (strings)

Δημοσ.

ΟΚ σε ευχαριστώ πολύ φίλε μου!

 

Για να καταλάβω.. η strcmp κοιτάει τι υπάρχει στην διευθυνση μνημης cmd (*cmd) και αν είναι "test" επιστρεφει 0;

 

 

Δημοσ.

<blockquote><font class="small">Quote nodreams.ct:</font><hr> ΟΚ σε ευχαριστώ πολύ φίλε μου!

 

Για να καταλάβω.. η strcmp κοιτάει τι υπάρχει στην διευθυνση μνημης cmd (*cmd) και αν είναι "test" επιστρεφει 0;

 

<hr /></blockquote>

ναι αυτό κάνει. Για την ακρίβεια συγκρίνει τα δύο string (string compare), και αν είναι ίδια επιστρέφει 0

(θέλει να βάλεις και #include<string.h>)

Δημοσ.

Σωστός ο krot.

 

Το == συγκρίνει τις θέσεις μνήμης, δηλαδή διευθύνσεις όπως 0x123AB λόγου χάρη. Αν και οι δύο μεταβλητές δείχνουνε (point) στην ίδια θέση μνήμης τότε το αποτέλεσμα σύγκρισης με == θα βγεί true.

 

Από την άλλη η strcmp συγκρίνει τα δεδομένα που βρίσκονται στις θέσεις της μνήμης, δηλαδή την τιμή "test" που βρίσκεται για παράδειγμα στη θέση μνήμης 0x323BD.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...