2017-02-02 6 views

Antwort

1
if(&line[0] == "#"){ 

sollte

if(line[0] == '#'){ 

Sie wollen die ersten Zeichen der Zeichenfolge vergleichen und line ist bereits ein String ist, besteht keine Notwendigkeit, die Adresse (&) zu nehmen, verwenden auch einfache Anführungszeichen statt doppelte Anführungszeichen.

+1

' '#'' ist wahrscheinlich die Absicht, nicht ' "#"'. – DeiDei

+0

Ich habe das versucht, es funktioniert auch nicht, und ich bekomme eine Warnung "main.c: 63: 30: Warnung: Vergleich zwischen Zeiger und Integer" –

+0

Danke @DeiDei, dass und nicht mit "&" löste mein Problem . –

4

tun Statt diese

if (line[0] == '#') // Note the single quotes 

Wenn Sie die Adresse nehmen sicher der Vergleich falsch ist unabhängig davon, welche Zeichen bei line[0] weil Sie Adressen vergleichen und Sie können sicher sein, dass sie anders sein wird. Sie müssen stattdessen die Werte vergleichen.

Wenn Sie eine Warnung sehen, bedeutet das normalerweise, dass etwas nicht stimmt. Wenn Sie eine Warnung sehen und dennoch nichts falsch ist, haben Sie sicherlich eine solche Warnung erwartet. Wenn die Warnung unerwartet ist, haben Sie etwas Schlechtes getan.


&line[0] ist die gleiche wie line so sind die Adresse von line verglichen werden, die einen Zeiger auf die Adresse des Stringliteral "#" ist, die mit aller Sicherheit nicht gleich ist.

+0

Ich habe das versucht, es funktioniert auch nicht, und ich bekomme eine Warnung "main.c: 63: 30: Warnung: Vergleich zwischen Zeiger und Integer" –

+0

@asdqq Bitte nicht die Hochkomma, "#" und aktivieren Kompilierungswarnungen. Sie entweder 1. Ich habe das nicht versucht! 2. Ihre Eingabe hat kein '#' als erstes Zeichen. –

+0

Ah, danke, dass und die Verwendung von # anstelle von "#" löste mein Problem. Das Problem war mit dem '&', ich habe nicht bemerkt, dass du das auch geändert hast, mein Schlechter! –

1

&line bedeutet, dass die Adresse der Zeile, Sie seinen Wert wollen und deshalb verwenden:

line[0] == '#' 
Verwandte Themen