# [C] doppelte Anführungszeichen vs. einfache - Wo ist der Unterschied?



## BastianW (20. April 2009)

In C kann ich doppelte Anführungszeichen 


```
else if (InputChar=="\t")
```

oder einfache nehmen


```
else if (InputChar=='\t')
```

Wo ist der Unterschied (mal ganz davon ab das mein Script nicht klappt)? 

Der Vollständigkeithalber hier das gesamte Script


```
#include <stdio.h>

// Ein Programm das Leerzeichen, Tabulatoren und Zeilenenden zählt


main() {


char InputChar;
int LeerzeichenCounter;
LeerzeichenCounter = 0;
int TabCounter;
TabCounter = 0;
int ZeilenCounter;
ZeilenCounter = 0;



while ((InputChar = getchar()) !=EOF )  // while until there is a EOF in the input
{

    if (InputChar==' ')
    {
        LeerzeichenCounter++;
    }
    else if (InputChar=='\t')
    {
        TabCounter++;
    }
    else if (InputChar=='\n')
    {
        ZeilenCounter++;
    }



}


printf("Ihre Eingabe beinhaltet %i Leerzeichen, %i Tabs und %i Zeilen.",LeerzeichenCounter,TabCounter,ZeilenCounter);



}
```


----------



## RedWing (20. April 2009)

Hallo,

einfache Hochkommata betten ein Character-Literal ein, d.h. einen einzelnen Characterwert. Dies kann ein Buchstabe oder ein Sonderzeichen sein (alles das was die ASCII Tabelle hergibt). Doppelte Hochkommata betten ein String-Literal ein, d.h, eine Kette von einzelnen Characterwerten. Zusätzlich gilt das ein String-Literal immer mit dem Characterwert '\0' abgeschlossen ist. 

Solche Literale werden in C als Konstanten behandelt und meist im Textsegment (da auch wo der Code liegt) mitgeführt und gespeichert.

Gruß,
RedWing


----------



## BastianW (20. April 2009)

ohje... Hartes Futter für einen C Anfänger wie mich .

Bedeuted also wenn ich einen Text Schreibe dann muss er zwingen in die doppelten Anführungszeichen? Nur einzellne Character bekommen die einfachen Anführungszeichen?

Praktisch zum lernen... ein Character ein anführungszeichen, mehrere Character mehrere Anführungszeichen?


----------



## devDevil (20. April 2009)

Jap. Und ist halt wichtig das nen String immer Nullterminiert ist, d.h. ist auch ein "a" nicht dasselbe wie ein 'a', denn "a" == { 'a', '\0' } 
Weiterhin funktioniert dabei dann auch der operator== nicht ganz so wie du es erwartest ... beim character-datentyp hast du einen einfachen vergleich. bei einem string hast du dagegen einen array von charactern bzw. es werden die zeigeradressen (auf den anfang des strings) verglichen  dafür gibt es dann funktionen wie std::strcmp ...


----------



## BastianW (28. April 2009)

@devDevil

das habe ich auch schon lernen müssen. Ich komme aus dem PHP Bereich. Und da ist es ganz egal ob das ein String ein Buchstabe oder eine Zahl ist. Ist eine gewaltige Umstellung.

Insbesonders Zeiger... DAS ist echt eine harte Nuss...


----------

