您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-15 16:57 1001 查看
我一开始是想写一个下五子棋的程序,打算用一个字符二维数组构造棋盘:

#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’,输出结果会是那样,我还没有想好。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: