Cytaty pojedyncze a podwójne w C lub c++

Kiedy należy używać cudzysłowów pojedynczych i podwójnych w programowaniu C lub c++?

Author: Jonathon Reinhart, 2010-09-10

12 answers

W C i c++ pojedyncze cudzysłowy identyfikują pojedynczy znak, podczas gdy podwójne cudzysłowy tworzą ciąg znaków. 'a' jest pojedynczym literałem a, podczas gdy" a "jest literałem łańcuchowym zawierającym' a ' i Terminator null (czyli tablicę znaków 2).

W C++ Typ literała znakowego to char, ale zauważ, że w C, Typ literała znakowego to int, to znaczy sizeof 'a' to 4 w architekturze, gdzie ints jest 32-bitowy( a CHAR_BIT to 8), podczas gdy sizeof(char) jest wszędzie 1.

 213
Author: David Rodríguez - dribeas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-11 13:18:19

Niektóre Kompilatory implementują również rozszerzenie, które pozwala na stałe wielo-znakowe. Standard C99 mówi:

6.4.4.4p10: "wartość stałej liczby całkowitej zawierającej więcej niż jeden znak (np. "ab"), lub zawierające znak lub ucieczkę sekwencja, która nie mapuje do znak wykonania jednobajtowego, jest implementacja-zdefiniowana."

To może wyglądać tak, na przykład:

const uint32_t png_ihdr = 'IHDR';

Stała wynikowa (w GCC, która implementuje to) ma wartość otrzymaną przez wzięcie każdego znaku i przesunięcie go w górę, tak że " I " kończy się w najbardziej znaczących bitach wartości 32-bitowej. Oczywiście nie powinieneś na tym polegać, jeśli piszesz niezależny od platformy kod.

 38
Author: unwind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-18 01:17:47

Pojedyncze cudzysłowy są znakami (char), podwójne cudzysłowy są łańcuchami zakończonymi znakiem null (char *).

char c = 'x';
char *s = "Hello World";
 22
Author: Eiko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-10 09:45:51
  • 'x' jest liczbą całkowitą, reprezentującą wartość liczbową litera x w zestawie znaków maszyny
  • "x" jest tablicą znaków, o długości dwóch znaków, składający się z ‘x’, po którym następuje ‘\0’
 10
Author: martynas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-18 14:01:02

Grzebałem w takich rzeczach jak: int cc = 'cc'; zdarza się, że jest to w zasadzie bajtowa Kopia do liczby całkowitej. Stąd sposób, aby spojrzeć na to jest to, że' cc', który jest w zasadzie 2 c ' są kopiowane do niższych 2 bajtów liczby całkowitej cc. Jeśli szukasz ciekawostki, to

printf("%d %d", 'c', 'cc'); would give:

99 25443

To dlatego, że 25443 = 99 + 256*99

Więc 'cc' jest stałą wieloznakową, a Nie ciągiem znaków.

Cheers

 7
Author: sanket,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 16:31:43

Pojedyncze cudzysłowy są dla pojedynczego znaku. Podwójne cudzysłowy są dla ciągu znaków (tablicy znaków). Możesz użyć pojedynczych cudzysłowów, aby utworzyć ciąg znaków po jednym znaku na raz, jeśli chcesz.

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
 6
Author: Graham Borland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-10 09:46:31
  1. single quote jest dla character;
  2. double quote jest dla string.
 6
Author: bygreencn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-07 10:22:28

Podwójne cudzysłowy są dla literałów łańcuchowych, np.:

char str[] = "Hello world";

Pojedyncze cudzysłowy są dla literałów pojedynczych znaków, np.:

char c = 'x';

EDIT jak stwierdził David w innej odpowiedzi, typ literał znaku to int.

 5
Author: Oliver Charlesworth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-10 10:00:29

W c pojedyncze cudzysłowy, takie jak 'a', oznaczają stałe znaków, podczas gdy "a" jest tablicą znaków, zawsze zakończoną znakiem 0

 5
Author: Jens Gustedt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-10 10:01:38

Pojedyncze cudzysłowy oznaczają znak, podwójne oznaczają łańcuch znaków.

W Javie jest to również to samo.

 3
Author: adiggo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-22 15:21:51

Użyj pojedynczego cudzysłowu z pojedynczym znakiem jako:

char ch = 'a';

Tutaj 'a' jest stałą znaku i jest równa ASCII wartości znaku a.

Użyj podwójnego cudzysłowu z łańcuchami jako:

char str[] = "foo";

TUTAJ "foo" jest ciągiem literalnym.

Its okay to use "a" but its not okay to use ' foo'

 2
Author: codaddict,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-10 09:50:04

Pojedynczy cudzysłów jest używany dla znaków, podczas gdy podwójny cudzysłów jest używany dla łańcuchów.

Na przykład..
 printf("%c \n",'a');
 printf("%s","Hello World");

Wyjście

A Hello World

Jeśli użyłeś ich w przypadku odwrotnym i użyłeś pojedynczego cudzysłowu Dla ciągu znaków i podwójnego cudzysłowu dla znaku. Tutaj to będzie wynik;

  printf("%c \n","a");
  printf("%s",'Hello World');

Wyjście:

Dla pierwszej linii.Będziesz miał wartość śmieci lub nieoczekiwane.albo możesz mieć takie wyjście..

While dla drugiego stwierdzenia. Zobaczysz nic. Jeszcze jedno. Jeśli masz więcej zeznań po tym. Nie dadzą ci również żadnego rezultatu.

Uwaga: język PHP daje możliwość łatwego użycia pojedynczego i podwójnego cytowania.

 2
Author: Hafiz Shehbaz Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-11 13:57:18