Ich benutze ein Array in diesem Code, weil ich eine Zeichenfolge brauche, die immer geändert werden sollte, deshalb verwende ich keinen Zeiger, wie immer, wenn ich den Code ausführe, bekomme ich ein seltsames Verhalten bei die 31. Iteration.Zufälliges Zeichen merkwürdig definiertes Verhalten
Code
int i = 0;
char name[100];
srand(getpid());
while(i<100) {
name[i] += (char)'A'+(rand()%26);
printf("%d strlen\n", i+1);
printf("%s\n", name);
printf("/////\n");
i++;
}
Ausgang
/////
30 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOY
/////
31 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJ
/////
32 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJWttime
/////
33 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW�time
/////
34 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW��ime
/////
35 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW���me
/////
36 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW����e
/////
37 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW�����
Mit anderen Worten: es druckt immer ttime
als der 31. Charakter und überschreibt dann den Code jedes Zeichen des Wortes und i Fragezeichen als Ergebnis.
auf die Dinge gehen noch schlimmer Blick auf die endgültige Ausgabe
100 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW�����K��ȶ������MKRLHALEV�SNNRVWNOEXUVQNJUHAEWN�W�YPMCW�N�PXHNT��0�
/////
Warum passiert das das?
'name' ist nicht '0' out, bevor das Spiel beginnt, wird dann als C-String behandelt: Das berüchtigte undefinierte Verhalten schlägt erneut zu. – alk
Ich wette, Sie haben bereits Erfahrung mit anderen Sprachen. C-Saiten sind komisch - aber vorhersehbar. 'string + = 'x'' macht nicht, was du denkst. – usr2564301
@alk was meinst du damit ist nicht 0-out bevor das Spiel startet? –