Warum funktioniert mein Programm "NULL in Arithmetik verwendet"
Schrieb ich Folgendes;
string words;
int a=0;
getline(cin,words);
while(words[a]!=NULL)
{
a++;
}
cout<<a<<endl;
Funktionierte es einwandfrei, aber wenn ich fügte hinzu, die Zeile am Ende:
string words;
int a=0;
getline(cin,words);
while(words[a]!=NULL)
{
a++;
}
cout<<a<<endl;
if(words[1]=="a") {cout<<"the letter is a";}
Nicht mehr funktioniert. Warum?
- Ist das ein Fehler oder eine Warnung? (Es klingt wie eine freundliche Warnung) Was ist der genaue text und die von dem compiler/Umgebung? Was bedeutet "funktioniert nicht" bedeutet?
- Bitte vergleichen Sie nicht ein Charakter auf NULL. Verwenden Sie c == 0 oder c == '\0' statt. Auch: Anfangen zu zählen von null (
words[0]=='a'
) - seine Warnung..ich bin mit bloodshed dev-cpp
- Blutvergießen ist nur eine IDE, die ruft einige andere toolchain (in der Regel eine version von MinGW GCC, denke ich). Es wäre gut zu wissen, die version, die der compiler verwendet Blutvergießen zu installieren. Auch, als eine Allgemeine Regel, die Sie sollten mit kopieren/einfügen die Fehlermeldung, die Sie bekommen in der Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Zeile
NULL
verwendet wird, nicht als Zeiger, sondern als0
.Funktioniert es seit
word[a]
Auswertung einechar
und Sie können vergleichen, einechar
mit0
.In der Zeile
es schlägt fehl, da Sie versuchen, zu vergleichen
char
mit"a"
, dessen Typchar const*
.Du wohl gemeint zu verwenden:
Ersetzen Sie die doppelten Anführungszeichen
""
von Apostroph''
imif
bedingten Ausdruck. Beachten Sie, dassNULL
makro verwendet wird, für null-Zeiger-Konstanten nicht-null-Konstante\0
.NUL
) ist nicht definiert, die in C++. Schreiben Sie einfach'\0'
wenn Sie möchten, dass ein nul-Zeichen,0
wenn Sie möchten, dass eine ganze Zahl 0,0.0
wenn Sie möchten, eine floating-point-0, undNULL
(odernullptr
wenn Sie C++11), wenn Sie wollen, einen Zeiger.NUL
definiert ist. Mir war nicht bewusst über C++. Danke.NUL
ist nicht definiert, die in C entweder - es könnte für Sie von einem nicht-standard-header oder als Erweiterung in der toolchain, die Sie verwenden.NUL
außer in Fußnote 199: In einer Implementierung verwendet, die das sieben-bit-US-ASCII-Zeichensatz, der das drucken Zeichen sind solche, deren Werte liegen von 0x20 (Leerzeichen) bis 0x7E (tilde); die steuerzeichen sind solche, deren Werte liegen zwischen 0 (NUL
) bis 0x1F (US), und das Zeichen 0x7F (DEL).`Wenn Sie
das Ergebnis ist ein char, der kann implizit in einen int-und im Vergleich zu NULL (das gleiche wie 0)
Wenn Sie sagen,
Sie versuchen, Sie zu vergleichen, einen char zu char*, was fehlschlägt
haben Sie zum konvertieren der linken Seite, um eine Zeichenfolge oder der rechten Seite, um einen char
der andere Weg ist,
gibt Sie den Teilstring ab der position 1 und der Länge 1...
Dadurch, dass Sie jetzt Vergleich von string zu char*, was möglich ist, weil char* implizit in eine Zeichenfolge konvertiert.