首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

字符常量数组为空,即使已为其赋值[C++]

字符常量数组为空,即使已为其赋值,是因为在C++中,字符常量数组是以null字符('\0')作为结束标志的。当我们为字符常量数组赋值时,如果没有显式地指定数组的大小,编译器会根据赋值的内容自动确定数组的大小,并在最后添加一个null字符作为结束标志。

例如,如果我们定义了一个字符常量数组并赋值如下:

代码语言:cpp
复制
char str[] = "Hello";

编译器会自动为数组分配足够的空间来存储字符串"Hello",并在最后添加一个null字符。因此,实际上数组的大小是6(包括null字符),并且可以通过索引访问数组的每个字符。

然而,如果我们将字符常量数组赋值为空字符串:

代码语言:cpp
复制
char str[] = "";

编译器仍然会为数组分配足够的空间来存储null字符,因此数组的大小仍然是1(只包括null字符)。这意味着数组中没有其他可访问的字符,因此数组看起来是空的。

在C++中,我们可以使用strlen函数来计算字符常量数组的长度,它会返回不包括null字符在内的字符数量。对于空的字符常量数组,strlen函数将返回0。

代码语言:cpp
复制
#include <iostream>
#include <cstring>

int main() {
    char str[] = "";
    int length = strlen(str);
    std::cout << "Length: " << length << std::endl;
    return 0;
}

输出结果为:

代码语言:txt
复制
Length: 0

总结起来,字符常量数组为空,即使已为其赋值,实际上是一个只包含null字符的数组,长度为1。这在某些情况下可能是有用的,例如作为字符串结束标志或占位符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ Primer Plus 第四章 复合类型 学习笔记

4.如果初始化为{1}而不是{0},则第一个元素被设置1,其他元素都被设置0. 5.如果初始化数组方括号内([])C++编译器将计算元素个数。...4.4 成员赋值 成员赋值(memberwise assignment):可以使用赋值运算符(=)将结构赋另一个同类型的结构。这样结构中的每个成员都将被设置另一个结构中相应成员的值。即使成员是数组。...int tacos[10] // 静态联编 使用new[]运算符创建数组时,将采用动态联编(动态数组),即将在运行时数组分配空间,长度运行时设置。...在cout和多数C++表达式中,char数组名、char指针以及用引号括起来的字符常量都被解释字符串第一个字符的地址。 不要使用字符常量或未被初始化的指针来接收输入。...创建访问成员。 8.4 C++管理数据内存的方式 自动存储 在函数内部定义的常规变量使用自动存储空间,称为自动变量。只在特定函数被执行时存在。 自动变量时一个局部变量,作用域包含它的代码块。

1.8K00

C++ 练气期之细聊字符

所以,在使用字符数组时描述字符串时,则需要在适当位置添加字符串结束标识符\0。 因结束符占用了一个存储位,HELLO需要5个存储位,在声明数组时,需要注意数组的实际长度 6。...2.2 字符常量 上述字符串的描述方式,略显繁琐,因需要时时注意添加\0。C当然也会想到这一点,可以使用字符常量简化字符数组的创建过程。...在使用字符常量赋值时,编译器会在字符常量的尾部添加\0,再存储到数组中,所以数组的长度至少是:字符常量的长度+1。...获取字符串的常规信息:如长度、是否…… string str="Hello World"; cout<<str.size()<<endl; cout<<str.length()<<endl; //是否...总结 本文主要讲解了C++字符串的2种存储方案,一个是C语言风格的数组存储方案,一个是C++对象存储方案。 因存储方案不同,操作函数的提供方式也不相同。

1.3K20
  • 关于Java代码优化的N条建议!

    这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: ?...这样,即使开发者不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...30、不要对数组使用toString()方法 看一下对数组使用toString()打印出来的是什么: ? 本意是想打印出数组内容,却有可能因为数组引用is而导致指针异常。...37、切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而 38、long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...; (2)NullPointerException可以通过判断对象是否来规避; (3)IndexOutOfBoundsException可以通过判断数组/字符串长度来规避; (4)ClassCastException

    62620

    阿里P8架构专家关于Java代码优化的N条建议!

    这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: ?...这样,即使开发者不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...30、不要对数组使用toString()方法 看一下对数组使用toString()打印出来的是什么: ? 本意是想打印出数组内容,却有可能因为数组引用is而导致指针异常。...37、切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而 38、long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...; (2)NullPointerException可以通过判断对象是否来规避; (3)IndexOutOfBoundsException可以通过判断数组/字符串长度来规避; (4)ClassCastException

    46220

    盘点 35 个 Java 代码优化细节

    28、字符串变量和字符常量equals的时候将字符常量写在前面 这是一个比较常见的小技巧了,如果有以下代码: ? 建议修改为: ?...在if之内将i赋值1,if判断里面的内容非0,返回的就是true了,但是明明i2,比较的值是1,应该返回的false。...这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: ?...这样,即使开发者不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...30、不要对数组使用toString方法 看一下对数组使用toString打印出来的是什么: ? 结果是: ? 本意是想打印出数组内容,却有可能因为数组引用is而导致指针异常。

    70430

    盘点:35 个 Java 代码优化魔鬼细节

    28、字符串变量和字符常量equals的时候将字符常量写在前面 这是一个比较常见的小技巧了,如果有以下代码: 建议修改为: 这么做主要是可以避免指针异常。...在if之内将i赋值1,if判断里面的内容非0,返回的就是true了,但是明明i2,比较的值是1,应该返回的false。...这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: 这样,即使开发者不小心写成了”1 = i”,C/C...++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...30、不要对数组使用toString方法 看一下对数组使用toString打印出来的是什么: 结果是: 本意是想打印出数组内容,却有可能因为数组引用is而导致指针异常。

    41430

    c++基础之字符串、向量和数组

    字符串、数组、vector等都是存储在内存的连续空间中,而且都是线性结构。算是c++语言中的基础数据结构了。...(): 判断字符串是否则返回true,否则返回false s.size(): 返回字符串中字符个数, 类型string::size_type。...end函数的返回 迭代器相减得到迭代器之间的距离,这个距离指的是右侧的迭代器移动多少个元素后到达左侧迭代器的位置,类型定义difference_type 使用迭代器来访问元素时,与使用指针访问指向的对象的方式一样...,灵活性上有些不足 定义和初始化内置数组 在初始化数组的时候需要注意: 数组大小的值可以是字面值常量常量表达式、或者普通常量 定义数组时必须指明类型,不允许用auto由初始化值来进行推断 const...字符数组可以直接使用字符常量进行赋值数组大小等于字符串长度加一 我们可以对数组中某个元素进行赋值,但是数组之间不允许直接进行拷贝和赋值 和vector中一样,数组中存储的也是对象,所以不存在存储引用的数组

    1.1K20

    Java代码优化总结(长期更新)

    这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: ?...这样,即使开发者不小心写成了"1 = i",C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...is而导致指针异常。...(37)切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而定 (38)long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...NullPointerException可以通过判断对象是否来规避 IndexOutOfBoundsException可以通过判断数组/字符串长度来规避 ClassCastException可以通过

    55830

    Java 代码优化之细节是魔鬼

    这种情况在 C/C++ 的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在 if 语句中不正确的赋值操作,建议将 if 语句写: int i = 2; if (1 == i...) { ... } else { ... } 这样,即使开发者不小心写成了 1 = i,C/C++ 编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值...,却有可能因为数组引用 is 而导致指针异常。...(37)切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而定 (38)long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...NullPointerException 可以通过判断对象是否来规避 IndexOutOfBoundsException 可以通过判断数组/字符串长度来规避 ClassCastException

    33620

    C++ 面试必备:常见 C++ 面试题汇总及详细解析

    引用也是C++中的一种数据类型,它提供了一种简洁而高效的方式来操作变量和对象,而不需要拷贝它们本身。引用被视为原变量的一个别名,操作类似于指针,但是引用不能被赋值NULL,也不能进行指针运算。...int* p = nullptr; // 初始化为指针 在指针使用后及时置 当指针变量不再使用时,我们应该将其置指针,防止误用。这样可以有效地避免产生野指针。...int* p = new int; *p = 10; delete p; p = nullptr; // 置指针,避免野指针产生 不要重复释放已经释放的内存 在释放指针所指向的内存空间之后,我们应该将该指针赋值...操作的灵活性 数组名是一个常量指针,不能修改,而指针可以被重新赋值,指向其他对象。因此使用指针比使用数组名更加灵活,可以在运行时动态确定指向的对象。...数组解引用 可以通过数组下标访问数组元素,也可以使用指针进行访问,但是需要注意的是,使用指针访问数组元素需要先将指针解引用,即使用 * 运算符。例如:*p 表示 p 指向的对象。

    2.1K30

    代码优化大盘点:35 个 Java 代码优化魔鬼细节

    28、字符串变量和字符常量equals的时候将字符常量写在前面 这是一个比较常见的小技巧了,如果有以下代码: ? 建议修改为: ? 这么做主要是可以避免指针异常。...在if之内将i赋值1,if判断里面的内容非0,返回的就是true了,但是明明i2,比较的值是1,应该返回的false。...这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: ?...这样,即使开发者不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...30、不要对数组使用toString方法 看一下对数组使用toString打印出来的是什么: ? 结果是: ? 本意是想打印出数组内容,却有可能因为数组引用is而导致指针异常。

    41330

    44个Java代码性能优化总结

    在if之内将i赋值1,if判断里面的内容非0,返回的就是true了,但是明明i2,比较的值是1,应该返回的false。...这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: int i = 2; if (1 == i) {...... } else { ... } 这样,即使开发者不小心写成了"1=i",C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...而导致指针异常。...NullPointerException可以通过判断对象是否来规避 IndexOutOfBoundsException可以通过判断数组/字符串长度来规避 ClassCastException可以通过

    730130

    【笔记】《C++Primer》—— 第一部分:C++基础

    +中格式将.h去掉,再在头部增加"c",如变为 2 变量和基本类型 wchar_t :确保可以存放机器最大扩展字符集中任意一个字符的“宽字符”,最小尺寸16位...我们同样也可以在if和switch中定义变量 default标签会在没有任何case匹配时触发,即使不需要这种情况也建议写上一个的default并加上注释 switch语句由于会进行语句跳转,要求不能跳过变量的初始化而使用变量...,定义常量引用是更好的习惯 传递数组的引用时,注意由于引用必须要有实体,所以需要保证输入的数组大小与形参指定的大小相同 main函数可以带有两个参数,argc和argv,其中argc是命令行调用此程序时附带传入的参数数量..._ _TIME_ _,存放文件编译日期的_ _DATE_ _ 7 类 类在C++中既可以用struct也可以用class,区别在于默认的访问权限,struct是public的,class是private...C11此时可以用 [类名]()=default 来要求编译器生成一个默认行为 在构造函数和函数体间用冒号连接一段以逗号分隔的调用串,调用名为函数的成员,即为构造函数的初始值列表,可以很方便地在函数体是时完成构造函数中对值的赋值

    1.5K40

    C++重要知识点小结---3

    函数外的str是一个 静态定义的数组,因此大小6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此siz eof作用于上只将其当指针看,一个指针4个字节,因此返回...C++中的类,默认产生哪些类成员函数?...在 c程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等3个用处。 在c++程序中,它还可以修饰函数的定义体,定义类中某个成员常态函数,即不改变类中的数据成员。...(2) 在c++中使用const常量而不使用宏常量,即const常量完全取代宏常量。...在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。

    89961

    44个Java性能优化细节,教你提高代码运行的效率!

    这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: int i = 2; if (1 == i) {...... } else { ... } 这样,即使开发者不小心写成了1 = i,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...is而导致指针异常。...37、切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而定 38、long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...NullPointerException可以通过判断对象是否来规避 IndexOutOfBoundsException可以通过判断数组/字符串长度来规避 ClassCastException可以通过

    77320

    Java 性能优化:教你提高代码运行的效率

    这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: int i = 2; if (1 == i) {...... } else { ... } 这样,即使开发者不小心写成了1 = i,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...is而导致指针异常。...37、切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而定 38、long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...NullPointerException可以通过判断对象是否来规避 IndexOutOfBoundsException可以通过判断数组/字符串长度来规避 ClassCastException可以通过

    74220

    java代码优化的若干细节

    这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: int i = 2;if (1 == i) { ......}else{ ... } 这样,即使开发者不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...而导致指针异常。...37)切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而定 (38)long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...NullPointerException可以通过判断对象是否来规避 IndexOutOfBoundsException可以通过判断数组/字符串长度来规避 ClassCastException可以通过

    46940

    44个Java代码性能优化总结

    这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: int i = 2; if (1 == i) {...... } else { ... } 这样,即使开发者不小心写成了"1=i",C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...is而导致指针异常。...(37)切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符常量是否使用常量定义可以视情况而定 (38)long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字...NullPointerException可以通过判断对象是否来规避 IndexOutOfBoundsException可以通过判断数组/字符串长度来规避 ClassCastException可以通过

    1.6K120

    Java 代码性能优化

    28、字符串变量和字符常量equals的时候将字符常量写在前面 这是一个比较常见的小技巧了,如果有以下代码: String str ="123"; if(str.equals("123")) {.....在if之内将i赋值1,if判断里面的内容非0,返回的就是true了,但是明明i2,比较的值是1,应该返回的false。...这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: int i =2;if(1== i) {...}else...这样,即使开发者不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...[]{1,2,3};System.out.println(is.toString());} 结果是: [I@18a992f 本意是想打印出数组内容,却有可能因为数组引用is而导致指针异常。

    42620

    35个Java代码优化的细节,你知道几个?

    28、字符串变量和字符常量equals的时候将字符常量写在前面 这是一个比较常见的小技巧了,如果有以下代码: String str = "123"; if (str.equals("123")) {...在if之内将i赋值1,if判断里面的内容非0,返回的就是true了,但是明明i2,比较的值是1,应该返回的false。...这种情况在C/C++的开发中是很可能发生的并且会导致一些难以理解的错误产生,所以,为了避免开发者在if语句中不正确的赋值操作,建议将if语句写: int i = 2; if (1 == i) { ...... } else { ... } 这样,即使开发者不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来,因为我们可以对一个变量赋值i1,但是不能对一个常量赋值1i。...is而导致指针异常。

    91920
    领券