1.访问单个字符
可以通过下标操作符"[]"或者成员函数"at()"访问单个字符。不同之处在于, [] 不会进行范围检查,而at() 会进行范围检查。也就是说,当访问一个不存在的字符位置时,采用 [] 将会获得不可预知的结果。若采用的是 "at()" 访问一个不存在的字符位置,程序将会中止。
2. sizeof
sizeof 可获得 string 的长度。所有的 string 类型调用 sizeof 都将返回相同的值 4.(在另外一些编译器中,有可能返回8)
可以这样理解:
class string
{
char* pstr;
...
}
每次调用 sizeof(string) 其实就等价于调用 sizeof(char*),返回一个char型指针的内存字节数。
不仅是 char* 型指针 返回 4,所有的指针类型使用 sizeof 都回返回相同的结果 4
sizeof( string* ) = 4
sizeof( int* ) = 4
sizeof( char* ) = 4
另外有点迷惑的地方,对非string的字符串用sizeof有完全不同的结果:
sizeof( "hello" ) = 6
sizeof( "hello there" ) = 12
这是因为, 字符串"hello"并不是作为一个string对象存储,其内部表示是一个以'\0'字符结尾的字符数组。其等价于:
char s[] = "hello";
sizeof( s ) ;// 返回数组所占空间容量, 6个字节
还有一个需要注意的是,当把 数组 作为参数传入到函数中以后,在函数中调用 sizeof 将不会得到数组的所占空间容量。
int main()
{
int array[50] = {1,2,3,4,5};
int size1 = sizeof( array ) / sizeof( array[0] ); // size1 = 50
test( array );
}
void test( int array[] )
{
int size2 = sizeof( array ) / sizeof( array[0] ); // 注意: size2 = 1
}
size2的值为1是因为,当数组名作为函数的参数时,它将严格的被当作指针看待。sizeof( array )等价于
sizeof( int* ),其值为4。同时,分母 sizeof( array[0] )也将返回4。
MSDN上sizeof定义:
sizeof Operator
sizeof expression
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. The expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses). When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof returns the size of the entire array. The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.
(只能获得静态数组的存储容量,无法获得动态数组的存储容量)
网上还看到另外一个例子,觉得不错,摘录如下:
char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[] = "0123456789";
sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[100] = "0123456789";
sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1
strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前
int ss[100] = "0123456789";
sizeof(ss) 结果 400 ===》ss表示在内存中的大小 100×4
strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以\'0'结尾的
分享到:
相关推荐
### 使用C++比较两个字符串的大小 在C++编程语言中,比较字符串是常见的操作之一。本篇文章将基于提供的代码示例,详细解释如何通过指针和`for`循环来比较两个字符串的大小。 #### 代码解读 首先,让我们详细了解...
3. `Join`:将一个字符串向量合并为一个单一的字符串,可以指定连接两个字符串的字符。 4. `ToLower`/`ToUpper`:将字符串转换为小写或大写,常用于不区分大小写的比较。 5. `StartsWith`/`EndsWith`:检查字符串...
* Boyer-Moore 算法是基于 Bad Character 规则和 Good Suffix 规则的字符串匹配算法,它使用这两个规则来减少比较的次数。 这些字符串匹配算法都有其优缺点,在实际应用中,我们需要根据具体情况选择合适的算法。
C++字符串处理大集合 在 C++ 中,字符串处理是非常重要的一部分,对于初学者来说,掌握字符串处理函数是非常必要的。下面我们将对 C++ 中的字符串处理函数进行详细的介绍。 C 语言字符串处理函数 1. 字符串长度:...
6. **注意事项**:在处理字符串时,要确保处理的字符串长度不超过数组的大小,或者在使用动态内存时正确地分配和释放内存。此外,当使用`std::cin`读取字符串时,如果输入的字符串过长,可能会导致缓冲区溢出,因此...
### C++字符串输入详解 在C++编程语言中,字符串处理是常见的需求之一,而C++提供了多种方式来处理字符串,其中最显著的区别在于传统的C风格字符串与C++的`std::string`类。本文旨在深入探讨C++中字符串输入的各种...
根据给定的文件信息,我们可以总结出以下有关“C++字符串处理系统”的详细知识点: ### 一、项目背景与目标 #### 1.1 课题描述 本项目旨在使用C++语言开发一个字符串处理系统,该系统具备多种功能,包括但不限于:...
本篇将详细探讨如何使用C++实现字符串的倒序,以及相关的C++字符串操作知识。 首先,我们要理解C++中字符串的基本概念。在C++中,字符串通常由字符数组表示,可以使用`char`类型的数组或`std::string`类来处理。`...
在C++编程中,处理字符串是一项常见的任务,尤其是在开发涉及文本处理的应用程序时。C++提供了多种方法来处理和操作字符串,包括标准库中的`std::...理解并熟练掌握这两种方法,将使你在处理C++字符串时更加得心应手。
本篇文章将深入探讨如何使用C++标准库中的`string`类来实现两个字符串的连接操作,并通过一个简单的示例程序进行演示。 #### 字符串连接的基本概念 在编程语言中,字符串连接是指将两个或多个字符串合并成一个新的...
### C++字符串完全指南 #### 一、Win32字符编码概述 在计算机科学中,字符串是一系列字符的集合,通常被用来表示文本。在C++编程语言中,字符串可以通过多种方式进行表示,包括传统的C风格字符串、标准模板库(STL)...
C/C++复制字符串到剪粘板中 C/C++复制字符串到剪粘板中是指将字符串复制到剪粘板中,以便在其他应用程序中使用。这可以通过Win32 API和MFC来实现。 在Win32 API中,可以使用OpenClipboard、GetClipboardData、...
3. **字符串拼接**:可以使用`+`运算符连接两个字符串,或者使用`append()`函数。 ```cpp std::string str1 = "Hello"; std::string str2 = "World"; str1 += ", "; // 使用加号拼接 str1.append(str2); // 使用...
求两个字符串的最长公共字符串 输出全部位置信息,并输出字符串,相同字符串先输出所有位置信息在输出字符串 测试平台:XP/VS 2008 CN
这里,我们找到了两个反斜杠,并截取了它们之间的子字符串"2000坐标系"。 4. 递归获取路径名中的子目录: 为了获取路径名中的子目录,可以使用递归函数`_GetSubPath`,它通过`find_last_of`查找并返回指定级别的子...
根据给定文件的信息,我们可以详细地探讨C++中的一些关键字符串处理函数,...以上就是从给定文件中提取出的C++字符串处理函数的详细解析,每个函数都有其特定用途,掌握它们能够极大地增强你在C++中处理字符串的能力。
"C++字符串处理类库及范例"就是这样一个资源,它专门针对字符串操作进行了优化,提供了强大的功能,包括字符串的分割、自定义分隔符的使用、字符串匹配和搜索等。这个库无需编译和安装,可以直接在项目中应用,大大...