首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++字符串(Ch)和sizeof(ch)字符串

C++字符串(Ch)和sizeof(ch)字符串
EN

Stack Overflow用户
提问于 2012-08-13 16:11:39
回答 6查看 1.9K关注 0票数 0

我有这样的代码:

代码语言:javascript
复制
int main()
{
    char ch[15];
    cout<<strlen(ch)<<endl; //7
    cout<<sizeof(ch)<<endl; //15
    return 0;
}

为什么即使是空的char数组,strlen(ch)也会给出不同的结果?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-13 16:12:59

ch是一个局部变量,并且局部变量未初始化。所以你认为它是空字符串的假设是不正确的。里面装满了垃圾。在7个垃圾字符之后发现一个\0字符,因此strlen返回7,这只是一种巧合。

你可以这样做来确保一个空的字符串-

代码语言:javascript
复制
char ch[15]={0};
ch[0]='\0`;
strcpy(ch,"");

这里有一个类似的帖子,可以阅读更多内容

Variable initialization in C++

票数 5
EN

Stack Overflow用户

发布于 2012-08-13 16:13:47

您的代码具有未定义的行为,因为您正在使用strlen读取数组的未初始化值。如果你想从strlen得到一个确定的结果,你必须初始化(或赋值)你的数组。

例如。

代码语言:javascript
复制
char ch[15] = "Hello, world!";

代码语言:javascript
复制
char ch[15] = {};

sizeof将给出其操作数的大小,因为char的大小是1,根据定义,char[15]的大小将始终是15。

strlen给出了以null结尾的字符串的长度,它是给定char数组中第一个值为0char的偏移量。要使对strlen的调用有效,的参数必须实际指向以null结尾的字符串。

票数 6
EN

Stack Overflow用户

发布于 2012-08-13 16:13:05

问题出在

代码语言:javascript
复制
strlen(ch);

strlen计算字符的数量,直到命中\0符号。在这里,ch是未初始化的,因此strlen可以返回任何内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11930366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档