Ich habe ein Stück Code in C geschrieben, in dem ich ein Array mit Zufallszahlen/Zeichen initialisiere. Aber wenn ich die Array-Werte nach der Initialisierung drucke, sehe ich, dass der Wert für jeden Index dem letzten zugewiesenen Wert entspricht (Wert des letzten Index). Bitte sagen Sie mir, was das Problem in meinem Code ist?Array-Werte nicht gleich nach der Initialisierung
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char *save[3][3] = { {" "," "," "}, {" "," "," "}, {" "," "," "} };
char x[2] = {'\0', '\0'};
int i, j, b;
srand(time(NULL));
printf("Assigned Values (initializing):\n");
for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
b = rand()%10;
x[0] = b+'0';
save[i][j] = x;
printf("%s ",save[i][j]);
}
}
printf("\n\nValues after initializing:\n");
for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
printf("%s ",save[i][j]);
}
}
printf("\n\n");
return 0;
}
Ausgang:
Assigned Values (initializing):
1 5 9 8 5 7 5 4 1
Values after initializing:
1 1 1 1 1 1 1 1 1
Press any key to continue . . .
Schreiben Sie nicht speichern [i] [j] = x. Es weist allen Elementen des Arrays denselben Zeiger zu. Verwenden Sie strcpy(), um Werte zu kopieren. –
@ GiacomoDegliEsposti, und dann undefiniertes Verhalten aufrufen, da alle Zeiger in 'save' auf statischen Speicher verweisen. – StoryTeller
@GiacomoDegliEsposti Die Verwendung von 'strcpy()' scheint hier keine gute Wahl zu sein, da das Ändern von String-Literalen * undefiniertes Verhalten * aufruft. – MikeCAT