牛骨文教育服务平台(让学习变的简单)
博文笔记

[C语言]给一个二维字符数组赋值的问题

创建时间:2017-10-15 投稿人: 浏览次数:657

我一开始是想写一个下五子棋的程序,打算用一个字符二维数组构造棋盘:

#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
", a[j]);
}
期待输出:

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO

OOOOOOOOOO


实际输出:
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOO
OOOOOOOOOO

为什么? 因为没有‘’作为字符串结束标志。
把上面代码中的a[10][10]改为a[10][11],就正常了。多留一位,会自动补上‘’
也可以直接赋值: 正确的:a[10][12] = {"00000000000","00000000000", 
"00000000000", "00000000000", "00000000000", 
"00000000000", "00000000000", "00000000000", 
"00000000000", "00000000000"};
注意:不能用a[10][11]!
错误的:
a[10][11] = {"00000000000","00000000000", 
"00000000000", "00000000000", "00000000000", 
"00000000000", "00000000000", "00000000000", 
"00000000000", "00000000000"};

至于为什么不加‘’,输出结果会是那样,我还没有想好。。。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。