'(就是0)停止,int a[2]={2,3}; a的两个元素占8个字节:0x02 0x00 0x00 0x00 0x03 0x00 0x0"og:type" content="webpage">'(就是0)停止,int a[2]={2,3}; a的两个元素占8个字节:0x02 0x00 0x00 0x00 0x03 0x00 0x0" /> '(就是0)停止,int a[2]={2,3}; a的两个元素占8个字节:0x02 0x00 0x00 0x00 0x03 0x00 0x0"> C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么还有整形数组作函数参数的问题_框架_内存溢出

阅读17

C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么还有整形数组作函数参数的问题,第1张

strlen函数求字符串长度

的原理是:从起始地址开始按字节读取,读取到'\0'(就是0)停止,

int a[2]={2,3}; a的两个元素占8个字节:0x02 0x00 0x00 0x00 0x03 0x00 0x00 0x00

那么strlen(a)从0x02读起,到0x00就停止,于是返回长度1,如果你把a[0]赋值为257,那就会返回2,a[0]赋值为65793,那就会返回3, a[0]赋值为16843009,就会返回5

数组

当作函数参数,那就只是一个指针了,对于32位系统那长度就是4

a=(int)malloc(2);

printf("%d\n",strlen(a)); 这个结果是不定的,a的值是随机的,a后面的地址内的值也是随机的,而strlen会从a开始一直往后读,直到读到0为止,你的例子里是读到a后面第18个字节为0,于是返回17

在C语言中习惯上在

使用时都把它定义成一个宏,比如#define

GET_ARRAY_LEN(array,len) {len = (sizeof(array) /

sizeof(array[0]));}。

而在C++中则可以使用模板技术定义一个函数,比如:template <classTintgetArrayLen(T& array){return(sizeof(array) / sizeof(array[0]));}这样对于一些简单的

数组

可以使用这个宏或者这个函数来获取数组的长度了。

以下是两个Demo程序,一个C语言的,一个C++的:PS:若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组

例如:char a[]="abcdefg"或者char

a[]={"abcdefg"}

则所求得的长度为字符数组的长度,而不是对应的字符串的长度,要求字符串的长度还需要减一

原因为存储字符串的字符数组末尾有一个'\0'字符,需要去掉它。

# include <stdioh>

#include<stringh>

int main()

{

char a[10]={4,2,3,4,5,6},x;

/将数组定义成字符型,就可以用字符函数了;int与char在大多数情况下是等价的;/

x=strlen(a);//用字符串长度计算函数;

printf("%d\n",x);

for(int i=0;i<5;i++)

/定义成char型依然可以以(int)型输出;ASCII码将int与char连接起来,成为水乳交融的同胞兄弟;/

printf("%d ",a[i]);

/整型可以用char定义,字符型也可以用int定义;在需要时可以交叉使用;譬如此代码;/

return 0;

}

以上就是关于C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么还有整形数组作函数参数的问题全部的内容,包括:C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么还有整形数组作函数参数的问题、C/C++ 中如何获取数组长度、C语言里有没有函数能计算整数型数组的赋值长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:

内存溢出

原文地址:

https://54852.com/web/9268762.html
字符
(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
法鼓山法鼓山一级用户组
TI公司提供的开发包中InitSysCtrl()函数的作用
上一篇
2023-04-26
金蝶kis标准版怎么卸载啊 在控制面板里卸载不了啊 用360软件管家也卸载不了啊!!
2023-04-26

发表评论
请登录后评论...
登录
提交

    评论列表(0条)
保存
{label}{label}