Zitat Zitat von RikuXan
nur 19 Zeichen, obwohl der Array 20 Variablen groß ist. Das liegt daran, dass der letzte Platz, für den "Null-Terminator" benutzt wird ( wenn der String 19 Zeichen lang ist, ansonsten ist er halt das Zeichen nach dem letzten normalen Zeichen ), der dem PC sagt wann der String abgeschlossen ist. Das >Muss< immer bedacht werden, da sonst ernsthafte Programmabstürze und Exploits hervorgerufen werden können.
Das >muss< nicht sein.
Zeichenketten, die in Anführungszeichen stehen wird zwar immer ein NULLbyte angehängt wodurch eine Zuweisung eines 20 Zeichenstring auf einen char-Array nicht (direkt) möglich ist (-> Fehlermeldung vom Compiler).

Trotzdem ist diese NULLterminierung keines wegs ein muss und wurde lediglich in der Standartbibliothek so eingeführt - eine Zeichenketten-terminierung kann durch JEDES beliebige Zeichen erfolgen, solange man es in seinen Funktionen als ein solches erkennt.

Sagen wir mal ich möchte meine char-Arrays mit dem ASCII-Zeichen 1 terminieren...

Quelltext:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int strlen2(char *array)
{
	int x;
	for(x = 0; array[x] != 1; x++);
	return x;
}

int main(void)
{
	char array[20];
	memcpy(array, "1234567890123456789\1", 20);
	printf("Stringlänge (ANSI): %d\n", strlen(array));
	printf("Stringlänge (BLACKBERRY XD): %d\n", strlen2(array));
	return 0;
}
Ausgabe:
Code:
blackberry@system:~/Desktop$ gcc a.c -o a; ./a
Stringlänge (ANSI): 20
Stringlänge (BLACKBERRY XD): 19
Und so kann man dann weiter arbeiten