1. 程式人生 > >[C語言]給一個二維字元陣列賦值的問題

[C語言]給一個二維字元陣列賦值的問題

我一開始是想寫一個下五子棋的程式,打算用一個字元二維陣列構造棋盤:

#include <stdio.h>
char a[10][10];
void p(char a[10][10]);
int main(void) {
	int i, j;
	for (i = 0; i < 10; i++) {
		for (j = 0; j < 10; j++)
			a[i][j] = 'O';
	}
	p(a);
	return 0;
}

void p(char a[10][10]) {
	for (int j = 0; j < 10; j++)
		printf("%s\n", a[j]);
}
期待輸出:

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

實際輸出: OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOO
OOOOOOOOOO
為什麼?
因為沒有‘\0’作為字串結束標誌。 把上面程式碼中的a[10][10]改為a[10][11],就正常了。多留一位,會自動補上‘\0’ 也可以直接賦值: 正確的:a[10][12] = {"00000000000\0","00000000000\0", 
"00000000000\0", "00000000000\0", "00000000000\0", 
"00000000000\0", "00000000000\0", "00000000000\0", 
"00000000000\0", "00000000000\0"};
注意:不能用a[10][11]! 錯誤的: a[10][11] = {"00000000000","00000000000", 
"00000000000", "00000000000", "00000000000", 
"00000000000", "00000000000", "00000000000", 
"00000000000", "00000000000"};
至於為什麼不加‘\0’,輸出結果會是那樣,我還沒有想好。。。