C++ 怎么给char类型的参数设置一个数组长度

C++ 怎么给char类型的参数设置一个数组长度,第1张

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字符数组大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9476535.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存