我已經用C語言編寫了一段代碼,其中我正在用隨機數/字符初始化一個數組。但是當我在初始化數組值後打印數組值時,我發現每個索引值都等於上次賦值(最後一個索引值)。請告訴我的代碼有什麼問題?初始化後數組值不相同
代碼:
#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;
}
輸出:
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 . . .
不要寫保存[i] [j] = X。它爲數組的所有元素分配相同的指針。使用strcpy()複製值。 –
@GiacomoDegliEsposti,並調用未定義的行爲,因爲'save'中的所有指針指向靜態存儲。 – StoryTeller
@GiacomoDegliEsposti使用'strcpy()'在這裏不是很好的選擇,因爲修改字符串文字會調用*未定義的行爲*。 – MikeCAT