[C语言]给一个二维字符数组赋值的问题
2017-10-15 16:57
1001 查看
我一开始是想写一个下五子棋的程序,打算用一个字符二维数组构造棋盘:
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’,输出结果会是那样,我还没有想好。。。
#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’,输出结果会是那样,我还没有想好。。。
相关文章推荐
- C语言指针问题,初始化,赋值,以及字符数组,字符串常量等问题
- c语言中,字符数组与字符串赋值问题
- C语言字符数组的赋值问题及比较
- 一个字符数组赋值的问题
- C语言学习之:字符数组赋值
- 给字符数组的一个字符赋值整数0的结果原来是这样
- C语言中,如何判断一个字符数组是空的?
- 用指针给数组赋值的一个小问题
- 今天学习时突然联想到这样一个有趣但无用的问题:利用C语言(不能是其他语言)求两个整数的较大/小值-----要求不用if、三目?、switch、循环、数组、加减乘除求余、位运算符以及任何库函数
- c语言中的字符数组赋值
- 关于C语言字符数组、字符串和指针的相关问题
- C语言:写一个函数,使给定的一个3x3二维整型数组转置,即行列互换
- 关于 将一个数组赋值给另外一个数组会重置原来数组的指针 的问题
- 《c和指针》3.1.3 二 、字符串常量 :不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组赋值
- C++,字符数组,赋值问题,语法练习
- C语言关于函数、数组的一个事例【关于选手评分的问题】
- 小小的C语言问题指针数组赋值----关于指针和数组。
- java中将一个字符数组赋值给另一个,两者同时变化
- C语言结构体中字符数组的问题
- c语言 char*类型作为中间变量将许多字符串保存到一个数组的问题