2010-12-09 3 views
8

Welche der folgenden sind nullterminierten String?nullterminierten String

char *str1 = "This is a string."; 
char *str2 = "This is a string.\0"; 
char str3[] = "This is a string."; 
const char *str4 = "This is a string."; 
const char *str5 = "This is a string.\0"; 
const char str6[] = "This is a string."; 
+5

"Ich bin immer null beendet." –

Antwort

10
  • All: ein Zeichenfolgenliteral ist eine terminierte Null-String
  • str2 und str5 haben die Besonderheit von

Auch Strings doppelt nullterminierte sein:

  • char *str1 sollte sein const char *str1
  • char *str2 sollte const char *str2
+2

Sie sind falsch über die letzte (str3). Es ist eine gültige Array-Initialisierung. – ybungalobill

+0

@ybungalobill: natürlich, tut mir leid – icecrime

8

Sie sind alle nullterminierten (str2 und str5 sind tatsächlich doppelt-null-terminiert), weil mit doppelten Anführungszeichen ist eine Abkürzung für einen nullterminierten char-Array.

So folgt aus:

"Hello" 

ist eigentlich diese:

{'H', 'e', 'l', 'l', 'o', '\0'} 

Variablen zu Stringliterale wie diese zeigen sollte als const deklariert werden.

1

All sein. Der C-Compiler aggregiert den String automatisch mit einem '\ 0'-Ende und speichert ihn dann in einem char [] oder referenziert ihn mit char *;

-3

Verwenden Sie keine char*s="hi" falls Sie etwas mit der Zeichenfolge zu tun, wie es zu ändern oder auch wenn Sie etwas, um es verketten wollen, weil hier String hi in lesen ist nur Abschnitt des Speichers und das Programm kann

abstürzen