1. Ich lege doch ein Feld mit 1000 Zeichen an. Wieso zeigt die erste Ausgabe 1011 an ?
Das muss nicht notwendigerweise 1011 sein. Das kann alles mögliche sein. Denn du hast in deinem Programm nur mitgeteilt, dass du gedenkst, 1000 Bytes zu benutzen.
Aufgeräumt hast du diese 1000 Bytes vor der ersten Benutzung nicht. D.h. dass weder irgendwelche \0 oder sonst etwas fest definiert in deinem puffer vorkommen. Tatsächlich liest der strlen() also fröhlich über den von dir angemeldeten Speicherbereich hinaus, bis er das erste Mal wirklich auf ein Nullbyte trifft.
2. Wenn ich das Feld mit Werten belege, zeigt es mir die Länge des Wortes an. Wieso ?
Weil strlen() so funktioniert.
Ich habe doch den Vektor nicht gekürzt, müsste der Vektor nicht immer noch 1000 Zeichen lang sein,
Vektor? Was für einen Vektor? Ich sehe da nur ein Character-Array. Der dir zur Verfügung stehende Speicherplatz für Bytes ist immer noch auf 1000 Zeichen beschränkt, aber strlen() zeigt dir nicht an, was sein
könnte (also maximal 1000 Zeichen) sondern was
ist - und das ist eben die Länge des von dir eingegebenen Wortes.
ich weiß zwar, dass der den Rest mit Nullen auffüllt,
Böser Trugschluß. Genau das passiert nämlich
nicht!. Wenn du strcpy() oder cin verwendest, dann wird nur ein einziges \0 nach den Eingabewerten eingetragen. Der Rest deines Characterarrays ist nach wie vor undefiniert.
aber dennoch ist der doch 1000 Zeichen lang, oder liege ich da falsch ?
Der dir für den Puffer zur Verfügung stehende Speicherplatz ist 1000 Byte lang, ja.
Mit Nullbytes belegt ist dieser Speicherplatz nicht, nein.
Und wieviel Bytes du nun tatsächlich korrekt belegt hast - das wissen nur du, strlen() und das erste \0 im Characterarray.