数组问题,我晕...
char aa[10]= "0123456789 ";
与
for(i=0;i <10;i++)
aa[i]=i;
这两种初始化数组有什么不同?
感觉第一种会自动加 '\0 ',而第二种不会.为什么?
这样说来第一种方法也不对吧,应该char aa[10]= "012345678 ";
而第二种方法是不是要加上aa[i]= '\0 ';呢?
tks
[解决办法]
第一种方法编译器已经实现帮你最后自动加上一个 '\0 ',此方法数组的大小应该是strlen( "0123456789 ") + 1,即11,而不是10.
第二种方法最后要自己加上 '\0 ',这种方法也要保证aa[9]为 '\0 '.
[解决办法]
第2总算是直接输入了吧 字符串的输入 第1个是不是一错误 里边只能放9个最后一个是 \0不然溢出了吧
[解决办法]
Inhibitory()
第一种方法编译器已经实现帮你最后自动加上一个 '\0 ',此方法数组的大小应该是strlen( "0123456789 ") + 1,即11,而不是10.
第二种方法最后要自己加上 '\0 ',这种方法也要保证aa[9]为 '\0 '.
------------------------------
支持
[解决办法]
char aa[10]= "0123456789 "; 这样写是错误的,编译器会提示溢出。
#include "stdafx.h "
#include <iostream.h>
#include <string.h>
int main(int argc, char* argv[])
{
char aa[11]= "0123456789 ";
cout < <strlen(aa) < <endl;
cout < <sizeof(aa) < <endl;
cout < <strlen( "0123456789 ") < <endl;
cout < <sizeof( "0123456789 ") < <endl;
return 0;
}
输出是:
10
11
10
11
[解决办法]
第一种方法编译器已经实现帮你最后自动加上一个 '\0 ',此方法数组的大小应该是strlen( "0123456789 ") + 1,即11,而不是10.
第二种方法最后要自己加上 '\0 ',这种方法也要保证aa[9]为 '\0 '.
[解决办法]
第一个实际上是字符串类型了,所以加上了结束符
[解决办法]
楼主是不是混淆一个东西,认为两种方式得出的数组的内容一样?
[解决办法]
除了楼上各位所说的,LZ还忽视了一个问题,char aa[10]= "0123456789 ";初始化aa时赋的是ASCII形式的数字,而
for(i=0;i <10;i++)
aa[i]=i;
则赋了原本运算所用的数字
[解决办法]
字符串和数组关系的基本问题。
简单说,就是末尾是否有 '\0 '的问题。
建议楼主多看看教科书上关于数组和字符串的内容。
数组只是字符串的载体,并不意味着,数组装的就是字符串,也不意味字符串一定要用数组装。
[解决办法]
mark