
1、C++函数参数不能设置字符数组长度,也没有必要设置,C++/C中所谓的数组就是指针(指向内存某一地址的变量)。
2、声明字符数组时,[]中的数应为数组中字符个数,包括'/0'
如 char p[5] = "dddd";
则实际为:'d' 'd' 'd' 'd' '/0'
若 char p[5] = "ddddd";
则编译出错,提示越界
3、(1)初始化字符数组时,会自动补充'/0'
如 char p[5] = "dd";
则实际为:'d' 'd' '/0' '/0' '/0'
再如 char p[3] = "";
则实际为:'/0' '/0' '/0'
(2)若没有只是声明字符数组,没初始化并不会自动补'/0'
如 char p[3];
则实际字符数组内容并不可知,因为实际上p也是个指针,现在并不知道它的指向
(3)同理,声明字符指针并不初始化时,也不知道指针的指向
如 char p;
(4)声明并初始化指针,由于"内存对齐"(由编译器实现),对32位机
则会补齐4位,自动补'/0'
如 char p = "a";
则实际为:p[0]='a',p[1]='/0',p[2]='/0',p[3]='/0'
若 char p ="";
则实际为:p[0]='/0',p[1]='/0',p[2]='/0',p[3]='/0'
include <iostream>
using namespace std;
该语句会对100个元素都赋初值,一般情况下数组中不包括0的情况下,你可以遍历一下找到第一个不为0的,但是你这里面本来就有0就没办法判断了。或者如果你可以保证数组中最后一个元素不为0的话,你可以逆序遍历数组,遇到不为0的就停止,这样可以保证遍历次数小于等于100
unsigned char test[100] = {0,0,1,2,3,4,0,0,5,6,0,7};
int i;
for(i = 99; i >= 0; i--)
if(test[i] != NULL)
break;
cout << "长度:" << i+1 << endl;
C语言里面的规定,函数的参数是数组时是按照指针传递的,也就是不论你传的tmp里面有多少个char,函数内的sizeof结果都是4,也就是那个指针的大小,建议你这样传参时最好再加个大小的参数,例如:void gettime(char tmp[],int nCount)
溢出了的,'e'和'\0'存在str2之后的内存中去了。
假设是在函数里面定义的st2,在这些局部变量分配在栈空间,你这里才分配一个字符数组,栈空间剩余内存被你默认使用了。
如果你多定义几个变量,如下程序:
#include <stdioh>
#include <stringh>
#include <iostream>
using namespace std;
void main()
{
char a='a',b='b',c='c',d='d';
char st2[3]="";
char e='e',f='f',g='g';
strcpy(st2, "love");
cout<<"st2="<<st2<<endl;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
cout<<"d="<<d<<endl;
cout<<"e="<<e<<endl;
cout<<"f="<<f<<endl;
cout<<"g="<<g<<endl;
getchar();
}
这里变量d值为'e',c值为'\0'了。这里是函数传参在栈顶,先定义的变量连续存放,从栈顶到栈底这样分配。
unsigned char 是无符号字符变量,不是字符串,长度为一字节。
strlen的参数必须是字符串,即以'\0'结尾的字符数组。
对于unsigned char c[100]来说,要想用strlen(c)求出c的长度,就必须在数组末尾加'\0'字符。可以直接读写指定数组元素,如c[50]='\0',也可以在定义时初始化成字符串,如
unsigned char c[100]="hello,world!";
编译器会自动在感叹号后面一个数组元素写入'\0'。
以上就是关于C++ 怎么给char类型的参数设置一个数组长度全部的内容,包括:C++ 怎么给char类型的参数设置一个数组长度、求一个unsigned char 类型的数组内容长度、传入函数的char字符数组大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)