社区
C++ 语言
帖子详情
关于strlen的一个小问题
lxb365
2005-12-16 12:16:12
char* p=new char[9];
cout<<strlen(p);
答案为什么不是9?
...全文
348
19
打赏
收藏
关于strlen的一个小问题
char* p=new char[9]; cout<<strlen(p); 答案为什么不是9?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
greenteanet
2005-12-16
打赏
举报
回复
注意区分字符数组和字符串
bm1408
2005-12-16
打赏
举报
回复
strlen(p); 就是从p开始一直到NULL字符('\0')的长度.
这个才是硬道理
wzb13
2005-12-16
打赏
举报
回复
对不起各位,我写错了,不是为什么不=9,是为什么不=4,实际上我在VS2005下运行的结果为24,这才是让我百思不得其解的。
---------------------------------------------------------------------------------
strlen(p); 就是从p开始一直到NULL字符('\0')的长度.
char* p=new char[9]; p指向空闲存储区中分配的内存,其值是上次使用后留下的值.
losedxyz
2005-12-16
打赏
举报
回复
strlen(p)好像没有什么意义吧
followwater
2005-12-16
打赏
举报
回复
char* p=new char[9];
p[8]=0;
cout<<strlen(p);
//ok
//strlen(p)=8
yangyzqo
2005-12-16
打赏
举报
回复
留名,有空好好看,呵呵
lxb365
2005-12-16
打赏
举报
回复
而且你们的解释也文不对题啊,我说的是strlen(p),而你们解释的全是sizeof(p)
fighter_go
2005-12-16
打赏
举报
回复
不一定是strlen(p)不一定是4 ,可以是3,可以是8,结果估计是未定义
lxb365
2005-12-16
打赏
举报
回复
对不起各位,我写错了,不是为什么不=9,是为什么不=4,实际上我在VS2005下运行的结果为24,这才是让我百思不得其解的。
fiftymetre
2005-12-16
打赏
举报
回复
指针当然是4了
khyang
2005-12-16
打赏
举报
回复
你程序中那样做,如《4》所说的。"仅仅只是一个指针;很遗憾,在失去其内涵的同时,它还失去了其常量特性"
khyang
2005-12-16
打赏
举报
回复
估计对数组名和指针的区别不怎么清楚:
<1> 数组名指代一种数据结构,这种数据结构就是数组;
例如:
char str[10];
char *pStr = str;
cout << sizeof(str) << endl;
cout << sizeof(pStr) << endl;
输出结果为:
10
4
这说明数组名str指代数据结构char[10]。
<2> 数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;
char str[10];
char *pStr = str;
str++; //编译出错,提示str不是左值
pStr++; //编译正确
<3> 指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址;
<4> 数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
例如:
void arrayTest(char str[])
{
cout << sizeof(str) << endl; //输出指针长度
str++; //编译正确
}
int main(int argc, char* argv[])
{
char str1[10] = "I Love U";
arrayTest(str1);
return 0;
}
//////////////////////////////////现在推敲下,应该明白了吧
chengzanmiao
2005-12-16
打赏
举报
回复
zhNKUjw(淡淡的云彩悠悠的游)
==================================
說的很詳細也很具體
starwalker
2005-12-16
打赏
举报
回复
strlen是根据'\0'来判断的
新分配的空间里面指不定是什么
风尘雨路
2005-12-16
打赏
举报
回复
ding
Kvci
2005-12-16
打赏
举报
回复
jf
zhengguoshan
2005-12-16
打赏
举报
回复
同意楼上的看法. 帮着顶一下吧.楼主可以结帖了.^_^
fighter_go
2005-12-16
打赏
举报
回复
看看这个,你就明白了
char* p=new char[9];
strcpy(p,"hello");
cout<<strlen(p);
strcpy(p,"howareyou");
cout<<strlen(p);
zhNKUjw
2005-12-16
打赏
举报
回复
strlen和sizeof不同
sizeof返回的是指定类型或者变量的长度,对于指针来说,它的长度是4。
strlen返回字符串的长度,遇到'\0'认为是字符串结束。
char p[] = {'h', 'e', 'l', 'l', '0'};
cout<<strlen(p);
会发现输出的不是5,因为字符数组并非以'\0'为结尾
char *p="abcd";
cout<<strlen(p);
输出为4。字符串是以'\0'结尾的
对于char *p = new char[9];只是在堆上分配了大小为9*sizeof(char)的空间,没有初始化,所以无法预料其中的值,也就不能依据'\0'判断字符串的结束。
《C语言基础》 之 第9章 字符串
课程内容:字符数组1、字符串越位的
问题
、指针变量的空间大小、字符串常量、字符串传参、printf格式化输出字符串、字符串的非格式化输出函数、字符串输入函数、
strlen
函数、strcpy函数和strncpy函数、strcmp函数和strncmp函数、strcat函数和strncat函数。
关于
strlen
一个
汉字字符串的
问题
今天测试
一个
汉字字符串长度,发现
一个
70个汉字(连同标点算上)
strlen
()得出结果是206,百思不得其解,然后搜网上资料才知道,给大家分享下 1. utf-8 如果系统采用的是utf-8,那么
strlen
(“新闻”)=6,即
一个
汉字占用3个字节。linux系统默认情况下采用的该种编码方式。 2. gb2312 如果系统采用的是gb2312,则
strlen
(“新闻”)=4,即
一个
汉字
C语言
strlen
返回值
问题
strlen
函数原型如下 size_t
strlen
(const char *s); size_t 是
一个
无符号整型数据,在进行大小比较的时候可能会出错 以下例子中 if (-1 <
strlen
(myStr)) { printf(" -1 <
strlen
(myStr)\n"); } else { printf("-1 >
strlen
(myStr)\n"); } 这里的输出结果是第二个,原因如下 在进行比较的时候,由于
strlen
返回的是无符号整形数据,C语言首先会把-1转化为
自己动手写
一个
strlen
()函数
strlen
()函数:
strlen
所作的是
一个
计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第
一个
字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。 那么我们就来尝试一下自己动手写
一个
strlen
函数。 方法一: #include <stdio.h> #include <assert.h> int my_
strlen
(const char* s) { char* p = s; assert(p
关于
strlen
与 sizeof 的区别
关于
strlen
与 sizeof 的区别,我相信很多人都有所了解。以下我总结了几点关于
strlen
与 sizeof 的区别和注意事项。 1.
strlen
是函数,sizeof 是运算符。 2.
strlen
测量的是字符的实际长度,以'\0' 结束。而sizeof 测量的是字符的分配大小。 比如: char str[20] = "hello"; printf("
strlen
: %
C++ 语言
64,643
社区成员
250,606
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章