1. char型的一维数组最后一个字符不一定是’\0’,标准输入中,程序将换行符转换成字符串结束符(即’\0’)存储,标志着该字符串的结束,一般而言,尽量字符数组开的大一点,使成为一个字符串,同时避免越界导致覆盖某些元素的值.
有问题的程序:
1.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char s[]="12345";
char ch[5];
for(int i=0;i<5;i++)
{
ch[i]=s[i];
}
cout<<ch<<endl;
cout<<strlen(ch)<<endl<<sizeof(ch);
return 0;
}
运行结果:
1234512345
10
5
原因分析:s和ch数组在内存中是相连的,由于ch数组中没有字符串结束符,而在输出时,提供给程序字符串的地址,程序一直输出到遇到字符串结束符,所以遇到了S数组的字符串结束符后才停止输出。
#include<iostream>
using namespace std;
void print(char ch[5][5]);
int main()
{
char ch[5][5];
for(int i=0;i<5;i+&