2016-10-05 8 views
0
# include <iostream> 
# include <string.h> 
using namespace std; 
int main() 
{ 
    int a=10; 
    int b=20; 
    char op[10]; 
    const char p='+'; 
    cout<<"enter the operation"<<endl; 
    cin>>op; 
    if(!strcmp(op,p)==0) 
{ 
     cout<<a+b; 
} 
    return 0; 
} 

ÜbersetzungsergebnisUnterschied zwischen char und const char

12 17 C: \ Benutzer \ DELL \ Dokumente \ cac.cpp [Fehler] ungültige Umwandlung von 'char' in 'const char *' [-fpermissive ]

Ich bin ein Anfänger. Bitte sag mir, welchen Fehler ich begangen habe.

+0

vergleichen 'op [0] == P' Sie‘ lle vergleichen chars es wird funktionieren. –

+3

als Anfänger sollte man wahrscheinlich ... 1) komplett vergessen '' namespace std; '2)' std :: string' anstelle von 'char []' verwenden 3) ein Buch über einige Grundlagen lesen (siehe zB [hier ] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)) – user463035818

+0

danke. Aber kannst du sagen, warum wir op [0] benutzen? –

Antwort

2

Hierbei handelt es sich nicht um den Unterschied zwischen char und const char, sondern zwischen char [] und char.

strcmp erwartet zwei Zeichenarrays.

op ist ein Array von (10) Zeichen. Gut: das erwartet strcmp.

p ist ein einzelnes Zeichen. Nicht gut: strcmp benötigt ein Char-Array, und ist keine Art von Array, sondern ein einzelnes Zeichen.

Sie können von einem einzigen Zeichen '+' in ein Zeichenfeld "+" ändern oder nur das 0. Zeichen von op vergleichen, wie in einem Kommentar oben empfohlen.

0

Es gibt keine Version von strcmp, die ein einzelnes Zeichen als Parameter verwendet, sondern stattdessen zwei Zeichenfolgen und vergleicht sie.

wenn Sie einen einzelnen char-Variable mit einer Zeichenfolge vergleichen wollen, können Sie es mit dem ersten Elemente des String oder mit einem anderen Elemente vergleichen:

#include <iostream> 
#include <string> 


int main() 
{ 

    char op[10] = "Hi"; 
    const char p = '+'; 

    // if(strcmp(op, p)) // error cannot covert parameter 2 from char to const char* 
    // cout << "op and p are identic" << std::endl; 
    // else 
    // std::cout << "op and b are not identic" << std::endl; 

    if(op[0] == p) 
     std::cout << "op[0] and p are identic" << std::endl; 
    else 
     std::cout << "op[0] and p are not identic" << std::endl; 

    const char* const pStr = "Bye"; //constant pointer to constant character string: pStr cannot change neither the address nor the value in address 
    const char* const pStr2 = "bye"; // the same as above 

    // pStr++; //error 
    // pStr[0]++; // error 


    if(!strcmp(pStr, pStr2)) 
     std::cout << "pStr and pStr2 are identic" << std::endl; 
    else 
     std::cout << "pStr and pStr2 are Not identic" << std::endl; 

    return 0; 
} 
+0

Das 'char *' zu einer String-Konstante ist ein bisschen gefährlich. Siehe [hier] (http://coliru.stacked-crooked.com/a/5fb7b70d30188233), und [hier] (http://stackoverflow.com/q/20944784) – wally

+0

@flatmouse Ich weiß, dass es so gefährlich ist. Der Fokus meines Beispiels liegt nur auf strcmp. danke – Raindrop7

+0

Danke Jungs. Aber was ist der Unterschied zwischen char, char *, const char, const char * –

Verwandte Themen