char二维数组,输出不解,乱码问题

秋的红果实 2019-09-26 05:31:42

char b[][3]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};
for(int i=0;i<3;i++)
{
printf("%s\n",b[i]);

}


输出:


C++版的大佬们,希望输出:ABC,DEF,GHI,结果是这样

问题:
1)如何输出我要的结果?
难道再放一个循环,逐个字符输出不成

2)结果不知道是否可以这样理解?
AB...I,在内存里是挨个放着的,printf("%s\n",b[1]); ,%s就是从D的地址开始,一直到最后的\0(I后的,C、F后不知道有没有\0)
那么第二行尾部有个方格,何解?
...全文
355 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-09-27
  • 打赏
  • 举报
回复
引用 6 楼 提及 的回复:
赵4老师的方法最好,不接受反驳
引用 5 楼 tjh12010 的回复:
货卖识家。
自信男孩 2019-09-27
  • 打赏
  • 举报
回复
引用 7 楼 秋的红果实 的回复:
感谢各位,知道这个\0了

那个方框,该怎么解释呢?

那个方框其实就是乱码~
7.83Hz 2019-09-27
  • 打赏
  • 举报
回复
引用 7 楼 秋的红果实的回复:
感谢各位,知道这个\0了 那个方框,该怎么解释呢?
1:方框意思是不能识别的数据。 2:printf输出字符串数据(%s),直至遇到'\0'才结束输出。 3:'\0'对于字符串,表示结束符号,占用一字节,所以定义时要[4]; 4:'\0',就是数据0; 5:字符数组单个赋值时,要人工加结束符。可以b[4]='\0';也可以b[4]=0; 6:特殊的,b[ ]=“ABC”;不用人工加结束符,也不用在下标中标明数组大小。双引号的作用是,为其中字符串数据自动加'\0',在内存中开辟存储空间,并把存储地址赋给左边变量。
秋的红果实 2019-09-26
  • 打赏
  • 举报
回复
感谢各位,知道这个\0了 那个方框,该怎么解释呢?
提及 2019-09-26
  • 打赏
  • 举报
回复
赵4老师的方法最好,不接受反驳
引用 5 楼 tjh12010 的回复:
tjh12010 2019-09-26
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{
char b[][4]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};
for(int i=0;i<3;i++)
{
printf("%s\n",b[i]);

}
return 0;
}
这个方法是最好的!!!!
如下 是你要的结果吧。。
自信男孩 2019-09-26
  • 打赏
  • 举报
回复
引用 3 楼 weixin_40290083 的回复:
char b[][4]={{'A','B','C','\0'},{'D','E','F','\0'},{'G','H','I','\0'}};

for(int i=0;i<3;i++)
{
printf("%s\n",b[i]);

}

试试这个


char b[][4]={{'A','B','C'},{'D','E','F'},{'G','H','I'}}; 

这样也是可以,把列数编程4(至少要变成4),这样前三个字符都是初始化的,最后一个会自动补0.
weixin_40290083 2019-09-26
  • 打赏
  • 举报
回复
char b[][4]={{'A','B','C','\0'},{'D','E','F','\0'},{'G','H','I','\0'}}; for(int i=0;i<3;i++) { printf("%s\n",b[i]); } 试试这个
赵4老师 2019-09-26
  • 打赏
  • 举报
回复
printf("%.3s\n",b[i]); 或者 printf("%.*s\n",3,b[i]); 应该也行。
starytx 2019-09-26
  • 打赏
  • 举报
回复
没有正确的结束符,给二维数组每一行末尾加一个'\0'就行了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧