C S tring

CString 没 有 基 类 。

  • 个 CString 对 象 由 可 变 长 度 的 一 队 字 符 组 成 。 CString 使

    用 类 似 于 Basic 的语法 提 供 函 数 和 操 作 符 。 连 接 和 比 较 操 作 符 以 及 简 化 的 内 存 管 理 使 CString 对 象比 普 通 字 符 串 数 组 容 易 使 用 。

CString 是 基 于 TCHAR 数 据 类 型 的 对 象 。 如 果 在 你 的 程 序 中 定 义 了 符 号

_UNICODE ,则 TCHAR 被 定 义 为 类 型 wchar_t ,即 16 位 字 符 类 型 ;否 则 ,TCHAR

被 定 义 为 char, 即 8 位 字 符 类 型 。 在 UNICODE 方 式 下 , CString 对 象 由 16 位

当 不 使 用 _UNICODE 时 , CString 是 多 字 节 字 符 集 ( MBC S , 也 被 认 为 是 双 字 节字 符 集 , DBCS ) 。 注 意 , 对 于 MBCS 字 符 串 , CString 仍 然 基 于 8 位 字 符 来 计算 , 返 回 , 以 及 处 理 字 符 串 , 并 且 你 的 应 用 程 序 必 须 自 己 解 释 MBCS 的 开 始 和结 束 字 节 。

CString 对 象 还 具 有 下 列 特 征 :

  • CString 可 作 为 连 接 操 作 的 结 果 而 增 大 。

  • CString 对 象 遵 循 “ 值 语 义 ” 。 应 将 CString 看 作 是 一 个 真

    实 的 字 符 串 而 不是 指 向 字 符 串 的 指 针 。

  • 你 可 以 使 用 C S tring 对 象 任 意 替 换 Coust char* 和 LPCTSTR

    函 数 参 数 。

  • 转 换 操 作 符 使 得 直 接 访 问 该 字 符 串 的 字 符 就 像 访 问 一

    个 只 读 字 符 ( C - 风 格的 字 符 ) 数 组 一 样 。

提 示 如 果 可 能 的 话 , 应 在 框 架 中 而 不 是 堆 中 分 配 这 个 CString 对 象 。这 可 以 节 省 内 存 并 简 化 参 数 的 传 递 。

CString 允 许 两 个 具 有 相 同 值 的 字 符 串 共 享 相 同 的 缓 冲 空 间 , 这 有 助 于 你 节 省 内存 空 间 。 但 是 , 如 果 你 初 始 直 接 改 变 该 缓 冲 的 内 容 ( 不 使 用 MFC ) , 则 有 可 能在 无 意 中 改 变 了 两 个 字 符 串 。 CString 提 供 了 两 个 成 员 函 数 CString::LockBuffer 和 CString::UnlockBuffer 来 帮 助 你 保 护 你 的 数 据 。 当 你 调 用 LockBuffer 时 , 你就 创 建 了 一 个 字 符 串 的 一 个 拷 贝 , 然 后 将 引 用 计 数 设 置 为 -1 , 这 就 “ 加 锁 ” 了该 缓 冲 区 。 当 缓 冲 区 被 加 锁 时 , 就 没 有 其 它 的 字 符 串 可 以 引 用 该 字 符 串 中 的 数据 , 被 加 锁 的 字 符 串 也 不 能 引 用 其 它 字 符 串 的 数 据 。 通 过 加 锁 该 缓 冲 区 内 的 字符 串 , 就 可 以 保 证 该 字 符 串 对 数 据 的 持 续 独 占 。 当 你 使 用 完 数 据 后 , 调 用UnlockBuffer 来 将 引 用 计 数 恢 复 为 1 。

更 多 的 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 “ MFC 字 符 串 ” 和 “ 字 符 串 :

Unicode 和 多 字 节 字 符 集 ( MBC S )支持”,以 及“ Microsoft Visual C++ 库 参 考 ” 中 的 “ M icrosoft Visual C++ 6.0 运 行 库 参 考 ” 。

#include <afx.h>

请 参 阅 在 “ Visual C++ Programmer's 指 南 ” 中 的 : 字 符 串 : 基 本 的 CString 操作 ,

字 符 串 : CString 语 义 , 字 符 串 : CString 与 C -Style Strings 相 关 的 操作,

字 符 串 : CString 异 常 清 除 , 字 符 串 : CString 参 数 传 递

C String 类 成 员

CString 以 各 种 方 法 构 造 一 个 CString 对 象

The String as an A rray

GetLength 返 回 CString 对 象 中 的 字 符 数 。 对 多 字 节 字 符 , 按 8 位 字 符 计 算 ; 即 在 一 个 多 字 节 字 符 中 一 个 开始 和 结 束 字 节 算 作 两 个 字 符

IsEmpty 测 试 一 个 CString 对 象 中 是 否 不 含 有 字 符

Empty 强 制 一 个 字 符 串 的 长 度 为 0

GetAt 返 回 在 给 定 位 置 的 字 符

Operator[] 返 回 在 给 定 位 置 的 字 符 – – – 它 是 代 替 GetAt 的 操 作符

SetAt 设 置 给 定 位 置 上 的 字 符

Operator LPCTSTR 象 访 问 一 个 C 风 格 的 字 符 串 一 样 , 直 接 访 问 保 存

在 一 个 CString 对 象 中 的 字 符

Operator = 给 CString 对 象 赋 一 个 新 值

Operator + 连 接 两 个 字 符 串 并 返 回 一 个 新 字 符 串

Operator += 把 一 个 新 字 符 串 连 接 到 一 个 已 经 存 在 的 字 符 串的 末 端

Comparison

Operator == <, etc. 比 较 操 作 符 ( 大 小 写 敏 感 ) Compare 比 较 两 个 字 符 串 ( 大 小 写 敏 感 ) CompareNoCase 比 较 两 个 字 符 串 ( 不 区 分 大 小 写 )

Collate 比 较 两 个 字 符 串 ( 大 小 写 敏 感 , 使 用 现 场 特 别 信息 )

CollateNoCase 比 较 两 个 字 符 串 ( 不 区 分 大 小 写 , 使 用 现 场 特 别

信 息 )

M id

提 取 一 个 字 符 串 的 中 间 一 部 分 ( 类 似 于

BASIC

M ID$ 函 数 )

Left

提 取 一 个 字 符 串 的 左 边 一 部 分 ( 类 似 于

BASIC

LEFT$ 函 数 )

Right

提 取 一 个 字 符 串 的 右 边 一 部 分 ( 类 似 于

BASIC

RIGHT $ 函 数 )

SpanIncluding 提 取 一 个 字 符 串 , 该 子 字 符 串 中 仅 含 有 某 一 字 符

集 合 中 的 字 符 。

SpanExcluding 提 取 一 个 字 符 串 , 该 子 字 符 串 中 不 含 有 某 一 字 符

集 合 中 的 字 符 。

Othe r Conversion s MakeUpper 将 字 符 串 中 的 所 有 字 符 转 换 为 大 写 字 符

MakeLower 将 字 符 串 中 的 所 有 字 符 转 换 为 小 写 字 符

MakeReverse 将 字 符 串 中 的 字 符 以 倒 序 排 列

Replace 用 其 它 字 符 替 换 指 定 的 字 符

Remove 从 一 个 字 符 串 中 移 走 指 定 的 字 符

Insert 在 字 符 串 中 的 给 定 索 引 处 插 入 一 个 字 符 或 一 个 子字 符 串

Delete 从 一 个 字 符 串 中 删 除 一 个 或 多 个 字 符

Format 像 sprintf 函 数 一 样 格 式 化 该 字 符 串

FormatV 像 vprintf 函 数 一 样 格 式 化 该 字 符 串

TrimLeft 将 字 符 串 中 前 面 的 空 格 整 理 出 字 符 串

TrimRight 将 字 符 串 中 结 尾 的 空 格 整 理 出 字 符 串

FormatMessage 格 式 化 一 个 消 息 字 符 串

Searchin g Find 在 一 个 较 大 的 字 符 串 中 查 找 字 符 或 子 字 符 串ReverseFind 在 一 个 较 大 的 字 符 串 中 从 末 端 开 始 查 找 某 个 字 符FindOneOf 查 找 与 某 个 字 符 集 合 中 的 字 符 相 匹 配 的 第 一 个 字

Operator << 把 一 个 CString 对 象 插 入 一 个 存 档 或 转 储 的 环 境 中

Operator >> 从 一 个 存 档 中 提 取 一 个 CString 对 象

Buffer Access

GetBuffer 返 回 一 个 指 向 CString 对 象 的 指 针

GetBufferSetLengt h

返 回 一 个 指 向 CString 对 象 的 指 针 , 字 符 串 被 截 断 为指 定 的 长 度

ReleaseBuffer 释 放 对 GetBuffer 所 返 回 的 缓 冲 区 的 控 制 权

FreeExtra 通 过 释 放 原 先 为 此 字 符 串 分 配 的 额 外 内 存 来 删 除 此字 符 串 对 象 的 额 外 开 销

LockBuffer 使 引 用 计 数 无 效 并 保 护 缓 冲 区 内 的 数 据

UnlockBuffer 使 引 用 计 数 有 效 并 释 放 缓 冲 区 中 的 数 据

AllocSysString 由 CString 数 据 分 配 一 个 BSTR

SetSysString 使 用 CString 对 象 中 的 数 据 来 设 置 一 个 已 存 在 的

BSTR

LoadString 从 一 个 W indows 资 源 中 加 载 一 个 已 经 存 在 的 CString

对 象

AnsiToOem 实 现 由 ANSI 字 符 集 到 OEM 字 符 集 的 对 应 转 换

OemToAnsi 实 现 由 OEM 字 符 集 到 ANSI 字 符 集 的 对 应 转 换

成 员 函 数

CString::AllocSysString

BSTR AllocSysString ( ) const; throw( CMemoryException );

返 回 值

指 向 新 分 配 的 字 符 串 。

说 明

此 成 员 函 数 分 配 一 个 BSTR 类 型 的 新 的 OLE 的 兼 容 Automation 字 符 串 , 并 把包 括 空 结 束 符 在 内 的 此 CString 对 象 的 内 容 拷 贝 到 其 中 , 若 内 存 不 足 , 则 发 出CMemoryException 异 常 。 这 个 函 数 通 常 是 用 来 为 OLE 自 动 化 返 回 字 符 串 。

在 很 少 的 情 况 下 , 你 需 要 使 用 ::SysFreeString 来 重 新 分 配 此 函 数 返 回 的 字 符 串的 存 储 单 元 。

注 意 如 果 你 使 用 的 是 一 个 共 享 库 的 MFC 并 且 是 在 调 试 模 式 下 生 成 的 , 则 你 必 须 与 MFCO42D.DLL 连 接 来 获 得 这 个 函 数 。 通 过 在 STDAFX.H 文 件 中

包 括 <afxdisp.h> , 可 以 使 连 接 程 序 自 动 获 得 MFCO42D.DLL 。

有 关 W indows 中 的 OLE 分 配 函 数 的 更 多 信 息 , 参 见 “ W in32 SDK OLE 程 序 员参 考 ” 中 的 ::SysAllocString 和 ::SysFreeString。

请 参 阅 ::SysAllocString, ::SysFreeString, CMemoryException

CString::Ans iT i Oem void AnsiToOem( ); 说 明

此 成 员 函 数 将 CString 对 象 中 的 所 有 字 符 由 ANSI 字 符 集 转 换 为 OEM 字 符 集 。参 见 “ M icrosoft Visual C++6.0 参 考 库 ” 中 的 “ Microsoft Visual C++6.0 语 言 参考 ” 卷 中 的 “ ANSI 字 符 代 码 表 ” 。

请 参 阅 CString::OemToAnsi

CString::Collate

int Collate( LPCTSTR lpsz ) const;

返 回 值

如 果 两 个 字 符 串 是 一 样 的 , 则 返 回 非 零 值 ; 如 果 CString 对 象 小 于 lpsz 则 返 回值 <0 ; 如 果 此 CString 对 象 大 于 lpsz 则 返 回 值 >0 。

参 数

lpsz

要 用 于 比 较 的 另 一 个 字 符 串 。

此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcscoll 来 比 较 这 个 CString 对 象 和 另 一 个 字符 串 。 此 通 用 文 本 函 数 _tcscoll 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设 置 的字 符 来 与 strcoll , wcscoll , 或 _mbscoll 对 应 。 这 些 函 数 的 每 一 个 都 根 据 当 前 使用 的 代 码 页 来 进 行 一 次 区 分 大 小 写 的 比 较 。 更 多 的 信 息 , 参 见“ M icrosoft Visual C++ 6.0 运 行 时 库 参 考 ” 中 的 strca t, wcsca t, _mbsca t。

请 参 阅 CString::Compare, CString::CompareNoCase

CString::CollateNoCase

int CollateNocase( LPCTSTR lpsz ) const;

如 果 字 符 串 是 一 样 的( 不 区 分 大 小 写 )则 返 回 非 零 值 ;如 果 CString 对 象 小 于 lpsz

( 不 区 分 大 小 写 ) 则 返 回 值 <0 , 如 果 CString 对 象 大 于 lpsz ( 不 区 分 大 小 写 ) 则 返 回 值 >0 。

参 数

lpsz

指 向 要 用 于 比 较 的 另 一 个 字 符 串 的 指 针 。

说 明

此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcscoll 来 比 较 这 个 CString 对 象 和 另 一 个 字符 串 。 此 通 用 文 本 函 数 _tcscoll 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设 置 的字 符 来 与 stricoll , wcsicoll, 或 _mbsicoll 对 应 。 这 些 函 数 的 每 一 个 都 根 据 当 前

使 用 的 代 码 页 来 进 行 一 次 不 区 分 大 小 写 的 比 较 。

请 参 阅 CString::Collate, CString::CompareNoCase, CString::Compare

CString::Compare

int Compare( LPCTSTR lpsz ) const;

返 回 值

如 果 字 符 串 是 一 样 的 则 返 回 非 零 值 ; 如 果 CString 对 象 小 于 lpsz 则 返 回 值 <0 , 如 果 CString 对 象 大 于 lpsz 则 返 回 值 >0 。

参 数

lpsz

要 用 于 比 较 的 另 一 个 字 符 串 。

说 明

此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcscmp 来 比 较 这 个 CString 对 象 和 另 一 个 字符 串 。 此 通 用 文 本 函 数 _tcscmp 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设 置的 字 符 来 与 strcm p, wcscm p, 或 _mbscmp 对 应 。 这 些 函 数 的 每 一 个 都 根 据 当 前使 用 的 代 码 页 来 进 行 一 次 区 分 大 小 写 的 比 较 , 而 且 不 会 被 现 场 影 响 。 更 多 的 信息 ,参 见“ Microsoft Visual C++ 6.0 运 行 库 参 考 ”中 的 strcm p,wcscm p,_mbscm p。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::Compare 。

// CString::Compare 示例CString s1( "abc" ); CString s2( " abd " );

ASSERT( s1.Compare( s2 ) == -1 ); // 与另一个 CString 比较。

ASSERT( s1.Compare( " ab e" ) == -1 ); // 与 LPTSTR 字符串比较。

请 参 阅 CString::CompareNoCase ,CString::Collate,CString::CollateNoCase

CString::CompareNoCase

int CompareNoCase( LPCTSTR lpsz ) const;

返 回 值

如 果 字 符 串 是 一 样 的( 不 区 分 大 小 写 )则 返 回 非 零 值 ;如 果 CString 对 象 小 于 lpsz

( 不 区 分 大 小 写 ) 则 返 回 值 <0 , 如 果 CString 对 象 大 于 lpsz ( 不 区 分 大 小 写 ) 则 返 回 值 >0 。

说 明

此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcsicmp 来 比 较 这 个 CString 对 象 和 另 一 个字 符 串 。 此 通 用 文 本 函 数 _tcsicmp 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设

置 的 字 符 来 与 _ stricm p , _ wcsicm p, 或 _mbsicmp 对 应 。 这 些 函 数 的 每 一 个 都 根据 当 前 使 用 的 代 码 页 来 进 行 一 次 区 分 大 小 写 的 比 较 , 而 且 不 会 被 现 场 影 响 。 更多 的 信 息 ,参 见“ M icrosoft Visual C++ 6.0 运 行 库 参 考 ”中 的 _stricm p,_wcsicm p,

_mbsicm p。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::CompareNoCase 。

// CString::CompareNoCase 示例

CString s1( "abc" ); CString s2( "ABD" );

ASSERT( s1.CompareNoCase( s2 ) == -1 ); // 与一个 CString 比较。

ASSERT( s1.Compare( "ABE" ) == -1 ); // 与 LPTSTR 字符串比较。

请 参 阅 CString::Compare, CString::Collate ,Cstring::CollateNoCase

CString::CString

CString( );

CString( const CString& stringSrc ); throw( CMemoryException );

CString( TCHAR ch, int nRepeat = 1 ); throw( CMemoryException );

CString( LPCTSTR lpch , int nLength ); throw( CMemoryException );

CString( const unsigned char* psz ); throw( CMemoryException );

CString( LPC W STR lpsz ); throw( CMemoryException );

CString( LPCSTR lpsz );

throw( CMemoryException );

参 数

stringSrc

一 个 已 经 存 在 的 CString 对 象 , 它 要 被 拷 贝 到 此 CString 对 象 中 。

ch

要 被 重 复 nRepeat 次 的 单 个 字 符 。

nRepeat

要对 ch 重 复 的 次 数 。

lpch

  • 个 指 向 字 符 数 组 的 指 针 , 该 字 符 数 组 的 长 度 是

    nLength , 不 包 括 结 尾 的

空 字 符 。

nLength

pch 中 的 字 符 的 个 数 。

psz

一 个 要 被 拷 贝 到 此 CString 对 象 中 去 的 以 空 字 符 结 尾 的 字 符 串 。

lpsz

  • 个 要 被 拷 贝 到 此 CString 对 象 中 去 的 以 空 字 符 结 尾 的 字

    符 串 。

说 明

这 些 构 造 函 数 的 每 一 个 都 用 来 以 指 定 的 数 据 初 始 化 一 个 新 的 CString 对 象 。

由 于 构 造 函 数 是 将 输 入 数 据 拷 贝 到 新 分 配 的 存 储 区 , 所 以 你 应 该 注 意 可 能 会 导致 的 内 存 异 常 。 注 意 , 这 些 构 造 函 数 中 的 某 些 函 数 的 作 用 相 当 于 一 个 转 换 函 数 。这 就 允 许 你 使 用 替 换 物 , 例 如 在 一 个 需 要 CString 对 象 的 地 方 用 一 个 LPTSTR 来 代 替 。

此 构 造 函 数 的 某 几 种 形 式 具 有 特 殊 的 目 的 :

  • CString( LPCSTR lpsz ) 从 一 个 ANSI 字 符 串 构 造 一 个 Unicode

    CString。你 可 以 象 下 面 的 例 子 那 样 用 这 个 函 数 来 加 载 一 个 字 符 串 资 源 。

  • CString( LPC W STR lpsz ) 从 一 个 Unicode 字 符 串 构 造 一 个

    CString。

  • CString( const unsigned char* psz ) 从 一 个 指 向 unsigned char

    的 指 针 构 造 一

个 CString 。

想 了 解 更 多 的 信 息 , 请 参 阅 “ Visual C++ 程 序 员 指 南 ” 随 机 文 中 的“ String:CString Exception Cleanup ” 一 节 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::CString。

// CString::CString 示例

CString s1; // 空字符串

CString s2( "cat" ); // 从一个文字的 C 字符串

CString s3 = s2; // 拷贝构造函数

CString s4( s2 + " " + s3 ); // 从一个字符串表达式

CString s5( 'x' ); // s5 = "x"

CString s6( 'x', 6 ); // s6 = "xxxxxx"

CString s7((LPCSTR)ID_FILE_NEW); // s7 = "Create a new document" CString city = "Philadelphia"; // 不是赋值操作符

请 参 阅 CString::operator =

CString::Delete

int Delete( int nIndex , int nCount = 1); throw( CMemoryException ) ;

返 回 值

返 回 已 改 变 的 字 符 串 的 长 度 。

参 数

nIndex

要 删 除 的 第 一 个 字 符 的 索 引 。

nCoun t

要 删 除 的 字 符 数 。

说 明

此 成 员 函 数 用 来 从 一 个 字 符 串 中 从 nIndex 开 始 的 地 方 删 除 一 个 或 多 个 字 符 。 如果 nCount 比 此 字 符 串 还 要 长 , 则 字 符 串 的 其 余 部 分 都 将 被 删 除 。

示 例

// 下 面 的 例 子 说 明 了 如 何 使 用 CString::Delete 。

str2 = “ Hockey is best!” ;

printf( “ Before: %s\n, (LPCTSTR) str2 ); int n = str2.Delete(6, 3 );

printf( “ After: %s/n ” , (LPCTSTR) str2 ); ASSERT( n == str2.Getlength ( ) );

// 这 些 代 码 产 生 下 面 的 删 除 行 :

Before: Hockey is best!

After: Hockey best!

请 参 阅 CString::Insert

CString::Empty void Empty( ); 说 明

此 成 员 函 数 用 来 使 CString 对 象 成 为 一 个 空 字 符 串 , 并 释 放 相 应 的 内 存 。

更 多 的 信 息 ,参 见“ V isual C++ 程 序 员 指 南 ”中 的“ 字 符 串 : CString 异 常 清 除 ”。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::Empty 。

// CString::Empty 示例

CString s( "abc" );

s.Empty();

ASSERT( s.GetLength( ) == 0 );

请 参 阅 CString::IsEmpty

CString::Find

int Find( TCHAR ch ) const;

int Find( LPCTSTR lpszSub ) const; int Find( TCHAR ch, int nStart ) const;

int Find( LPCTSTR lpszSub , int nStart ) const;

返 回 值

返 回 此 CString 对 象 中 与 需 要 的 子 字 符 串 或 字 符 匹 配 的 第 一 个 字 符 的 从 零 开 始的 索 引 ; 如 果 没 有 找 到 子 字 符 串 或 字 符 则 返 回 -1 。

参 数

ch

要 搜 索 的 单 个 字 符 。

lpszSub

要 搜 索 的 子 字 符 串 。

nStart

字 符 串 中 开 始 搜 索 的 字 符 的 索 引 ,如 果 是 0 ,则 是 从 头 开 始 搜 索 。如 果 nStart

不 是 0 , 则 位 于 nStart 处 的 字 符 不 包 括 在 搜 索 之 内 。

pstr

指 向 要 搜 索 的 字 符 串 的 指 针 。

说 明

此 成 员 函 数 用 来 在 此 字 符 串 中 搜 索 子 字 符 串 的 第 一 个 匹 配 的 字 符 。 函 数 的 重 载可 以 接 收 单 个 字 符 ( 类 似 于 运 行 时 函 数 strchr) 和 字 符 串 ( 类 似 于 strstr ) 。

示 例

//下 面 演 示 第 一 个 例 子

// CString::Fin d( TCHAR ch ) CString s( "abcdef" ); ASSERT( s.Find( 'c' ) == 2 );

ASSERT( s.Find( "de" ) == 3 );

// 下 面 演 示 第 二 个 例 子

// Cstring::Find(TCHAR ch,int nStart) Cstring str(“ The stars are aligned ” ); Ing n = str.Find( 'e ',5);

ASSERT(n == 12)

请 参 阅 CString::ReverseFind, CString::FindOneOf

CString::FindOneOf

int FindOneOf( LPCTSTR lpszCharSet ) const;

返 回 值

返 回 此 字 符 串 中 第 一 个 在 lpszCharSet 中 也 包 括 的 字 符 的 从 零 开 始 的 索 引 。

参 数

lpszCharSet

包 含 用 于 匹 配 字 符 的 字 符 串 。

说 明

此 成 员 函 数 在 此 字 符 串 中 搜 索 与 lpszCharSet 中 任 意 字 符 匹 配 的 第 一 个 字 符 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::FindOneO f。

// CString::FindOneOf 示 例

CString s( "abcdef" );

ASSERT( s.FindOneOf( "xd" ) == 3 ); // 'd' is first match.

请 参 阅 CString::Find

CString::Format

void Format( LPCTSTR lpszFormat , ... ); void Format( UINT nFormatID, ... );

参 数

lpszFormat

一 个 格 式 控 制 字 符 串 。

nFormatID

包 含 格 式 控 制 字 符 串 的 字 符 串 资 源 标 识 符 。

说 明

此 成 员 函 数 用 来 将 格 式 化 数 据 写 入 一 个 CString 中 , 其 方 法 就 像 sprintf 函 数 向一 个 C -风 格 的 字 符 数 组 中 格 式 化 输 出 数 据 一 样 。 这 个 成 员 函 数 在 CString 中格式 化 并 存 储 一 系 列 字 符 和 值 。 根 据 lpszFormat 中 指 定 的 格 式 或 nFormatID 标识的 字 符 串 资 源 , 函 数 中 的 每 一 个 可 选 参 数 ( 如 果 有 ) 都 被 转 换 并 输 出 。

如 果 此 字 符 串 对 象 本 身 是 作 为 Format 的 一 个 参 数 , 则 调 用 将 失 败 。 例 如 象 下 面的 代 码 :

CString str = “ Some Data ” ;

str.Format( “ %s%d ” ,str, 123); //注意:在参数列表中也使用了 str 。

将 导 致 不 可 预 期 的 结 果 。

当 你 传 递 一 个 字 符 串 作 为 一 个 可 选 择 的 参 数 时 , 你 必 须 显 式 地 将 它 转 换 为

LPCTSTR 。 这 个 格 式 与 printf 函 数 中 的 格 式 参 数 具 有 相 同 的 形 式 和 函 数 。 ( 有

关 格 式 和 参 数 的 描 述 ,参 见“ Microsofr Visual C++ 6.0 运 行 库 参 考 ”中 的 printf 。) 在 被 写 的 字 符 串 结 尾 将 添 加 一 个 空 字 符 。

更 多 的 信 息 , 参 见 “ Microsofr Visual C++ 6.0 运 行 时 库 参 考 ” 中 的 sprintf 。

请 参 阅 CString::GetBuffer,CString::FormatV

CString::FormatV

void FormatV( LPCTSTR lpszFormat , va _list argList );

参 数

lpszFormat

一 个 格 式 控 制 字 符 串 。

argList

要 传 递 的 参 数 列 表 。

此 成 员 函 数 用 来 将 格 式 化 数 据 和 一 个 参 数 变 量 列 表 写 入 一 个 CString 中 , 其 方法 就 像 vsprintf 函 数 向 一 个 C - 风 格 的 字 符 数 组 中 格 式 化 输 出 数 据 一 样 。 这 个 成员 函 数 在 CString 中 格 式 化 并 存 储 一 系 列 字 符 和 值 。 根 据 lpszFormat 中 指 定 的格 式 , 函 数 中 的 每 一 个 可 选 参 数 都 被 转 换 并 输 出 。

如 果 此 字 符 串 对 象 本 身 是 作 为 FormatV 的 一 个 次 数 , 则 调 用 将 失 败 。 例 如 象 下面 的 代 码 :

CString str = “ Some Data ” ;

str.FormatV(“ %s% d ” ,str, 123); //注意:在次数列表中也使用了 str。

将 导 致 不 可 预 期 的 结 果 。

更 多 的 信 息 , 参 见 “ Microsoft V isual C++ 6.0 运 行 库 参 考 ” 中 的 vsprintf 。

// 使用 CString::FormatV ,你可以像下面这样来编写函数:

void WriteLogEntry( CStdioFile& refFile, LPCTSTR pstrFormat, ... )

{

CTime timeWrite;

timeWrite = CTime:GetCurrentTime( );

// 输出时间

CString str = timeWrite.Format ( “ %d %b %y %H:%M:%S – ” ); refFile.Write( str, str.GetLength( ));

// 格式化并输出给定的数据

va_list args;

va_start( args, pstrFormat ); str.FormatV( pstrFormat, args ); refFile.Write( str, str.GetLength( ) );

// 插入一个换行符refFile.Write( “ \n ” , 1 ); return;

}

你 可 以 用 任 意 个 数 的 参 数 来 调 用 上 面 的 函 数 , 例 如 :

WriteLogEntry( fileLog , “ Program started ” ); WriteLogEntry( fileLog , “ Processed %d bytes ” 91341 );

WriteLogEntry( fileLog , “ %d error(s) found in %d line(s)” , 10, 1351 ); WriteLogEntry( fileLog , “ Program completed ” );

上 面 的 例 子 将 把 输 出 添 加 到 你 的 fileLog 文 件 , 就 像 下 面 给 出 的 一 样 :

17 Apr 97 12:34:53 – Program started

17 Apr 97 12:34:59 – Processed 91341 bytes

17 Apr 97 12:35:22 – 10 error(s) found in 1351 line(s)

17 Apr 97 12:35:23 – Program completed

请 参 阅 CString::Format, va_start

CString::FormatMessage

void FormatMessage( LPCTSTR lpszForma t, ... ); void FormatMessage( UINT nFormatID , ... );

参 数

lpszFormat

指 向 格 式 控 制 字 符 串 。 它 将 被 扫 描 来 进 行 插 入 , 从 而 进 行 格 式 化 。 这 个格 式 字 符 串 类 似 于 运 行 时 函 数 pritf-style 格 式 字 符 串 , 除 了 这 个 字 符 串 允许 参 数 可 以 按 任 意 顺 序 插 入 。

nFormatID

包 含 还 没 有 格 式 化 的 消 息 文 本 的 字 符 串 资 源 标 识 符 。

说 明

此 成 员 函 数 用 来 格 式 化 一 个 消 息 字 符 串 。 此 函 数 需 要 一 个 消 息 定 义 作 为 输 入 。该 消 息 定 义 是 由 lpszFormat 决 定 的 , 或 者 是 来 自 由 nFormatID 标 识 的 字 符 串 资源 。 函 数 将 这 个 格 式 化 的 消 息 文 本 拷 贝 到 CString 中 , 如 果 需 要 的 话 就 处 理 任何 嵌 入 的 插 入 顺 序 。

每 一 次 插 入 都 必 须 有 相 应 的 参 数 跟 随 lpszFormatnFormatID 参 数 。 在 消 息 文本 中 , 为 了 动 态 格 式 化 消 息 , 要 支 持 几 个 转 义 序 列 。 有 关 这 些 转 义 序 列 的 描 述和 它 们 的 意 义 , 参 见 “ W in32 SDK 程 序 员 参 考 ” 中 的 W indows::FormatMessage 函 数 。

请 参 阅 ::FormatMessage,CString::LoadString,CString::Format

CString::FreeExtra

void FreeExtra( );

说 明

此 成 员 函 数 用 来 释 放 原 先 被 此 字 符 串 分 配 的 但 不 再 使 用 的 额 外 的 内 存 。 这 将 减小 此 字 符 串 的 内 存 的 额 外 开 销 。 此 函 数 按 GetLength 返 回 的 准 确 长 度 来 重 新 分配 缓 冲 区 。

CString::GetAt

TCHAR GetAt( int nIndex ) const;

返 回 值

返 回 一 个 包 含 字 符 串 中 的 指 定 位 置 的 字 符 串 的 TCHAR 。

参 数

nIndex

CString 对 象 中 的 某 个 字 符 的 从 零 开 始 的 索 引 。 nIndex 参 数 必 须 大 于 或 等于 0 , 并 小 于 GetLength 函 数 的 返 回 值 。 Microsoft 基 础 类 库 的 测 试 版 验证 nIndex 的 边 界 ; 但 是 发 行 版 不 验 证 。

说 明

你 可 以 把 一 个 CString 对 象 看 作 是 一 个 字 符 数 组 。 GetAt 成 员 函 数 返 回 一 个 由 一个 索 引 号 指 定 的 单 个 字 符 。 重 载 的 下 标 ( []) 是 GetAt 常 用 的 代 用 符 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::GetA t。

// CString::GetAt 示 例

CString s( "abcdef" ); ASSERT( s.GetAt(2) == 'c' );

请 参 阅 CString::GetAt, CString::GetLength, CString::operator []

CString::GetBuffer

LPTSTR GetBuffer( int nMinBufLength );

throw( CMemoryException );

返 回 值

一 个 指 向 对 象 的 ( 以 空 字 符 结 尾 的 ) 字 符 缓 冲 区 的 LPTSTR 指 针 。

参 数

nMinBufLength

字 符 缓 冲 区 的 以 字 符 数 表 示 的 最 小 容 量 。 这 个 值 不 包 括 一 个 结 尾 的 空 字 符的 空 间 。

说 明

此 成 员 函 数 返 回 一 个 指 向 CString 对 象 的 内 部 字 符 缓 冲 区 的 指 针 。 返 回 的

LPTSTR 不是 const , 因 此 可 以 允 许 直 接 修 改 CString 的 内 容 。

如 果 你 使 用 由 GetBuffer 返 回 的 指 针 来 改 变 字 符 串 的 内 容 , 你 必 须 在 使 用 其 它的 CString 成 员 函 数 之 前 调 用 ReleaseBuffer 函 数 。

在 调 用 ReleaseBuffer 之 后 , 由 GetBuffer 返 回 的 地 址 也 许 就 无 效 了 , 因 为 其 它的 CString 操 作 可 能 会 导 致 CString 缓 冲 区 被 重 新 分 配 。 如 果 你 没 有 改 变 此CString 的 长 度 , 则 缓 冲 区 不 会 被 重 新 分 配 。

当 此 CString 对 象 被 销 毁 时 , 其 缓 冲 区 内 存 将 被 自 动 释 放 。

注 意 , 如 果 你 自 己 知 道 字 符 串 的 长 度 , 则 你 不 应 该 添 加 结 尾 的 空 字 符 。 但 是 , 当 你 用 ReleaseBuffer 来 释 放 该 缓 冲 区 时 , 你 必 须 指 定 最 后 的 字 符 串 长 度 。 如 果你 添 加 了 结 尾 的 空 字 符 , 你 应 该 给 ReleaseBuffer 的 长 度 参 数 传 递 -1 , ReleaseBuffer 将 对 该 缓 冲 区 执 行 strlen 来 确 定 它 的 长 度 。

示 例

下 面 的 例 子 说 明 了 如 何 用 CString::GetBuffer。

// CString::GetBuffer 例子

CString s( "abcd" ); #ifdef _DEBUG

afxDump << "CString s " << s << "\n"; #endif

LPTSTR p = s.GetBuffer( 10 );

strcpy( p, "Hello" ); // 直接访问 CString 对象。

s.R eleaseBuffer( ); #ifdef _DEBUG

afxDump << "CString s " << s << "\n"; #endif

请 参 阅 CString::GetBufferSetLength, CString::ReleaseBuffer

CString::GetBufferSetLength

LPTSTR GetBufferSetLength( int nNewLength );

throw( CMemoryException );

返 回 值

返 回 一 个 指 向 对 象 的 ( 以 空 字 符 结 尾 的 ) 字 符 缓 冲 区 的 LPTSTR 指 针 。

参 数

nNewLength

此 CString 字 符 缓 冲 区 的 以 字 符 数 表 示 的 精 确 容 量 。

说 明

此 成 员 函 数 返 回 一 个 指 向 CString 对 象 的 内 部 字 符 缓 冲 区 的 指 针 , 如 果 需 要 的话 , 切 断 或 增 长 缓 冲 区 的 长 度 以 精 确 匹 配 由 nNewLength 指 定 的 长 度 。 返 回 的LPTSTR 不是 const , 因 此 可 以 允 许 直 接 修 改 CString 的 内 容 。

如 果 你 使 用 由 GetBuffer 返 回 的 指 针 来 改 变 字 符 串 的 内 容 , 你 必 须 在 使 用 其 它的 CString 成 员 函 数 之 前 调 用 ReleaseBuffer 函 数 。

在 调 用 ReleaseBuffer 之 后 , 由 GetBuffer 返 回 的 地 址 也 许 就 无 效 了 , 因 为 其 它的 CString 操 作 可 能 会 导 致 CString 缓 冲 区 被 重 新 分 配 。 如 果 你 没 有 改 变 此CString 的 长 度 , 则 缓 冲 区 不 会 被 重 新 分 配 。

当 此 CString 对 象 被 销 毁 时 , 其 缓 冲 区 内 存 将 被 自 动 释 放 。

注 意 , 如 果 你 自 己 知 道 字 符 串 的 长 度 , 则 你 不 应 该 添 加 结 尾 的 空 字 符 。 但 是 , 当 你 用 ReleaseBuffer 来 释 放 该 缓 冲 区 时 , 你 必 须 指 定 最 后 的 字 符 串 长 度 。 如 果你 添 加 了 结 尾 的 空 字 符 , 你 应 该 给 ReleaseBuffer 的 长 度 参 数 传 递 -1 , ReleaseBuffer 将 对 该 缓 冲 区 执 行 strlen 来 确 定 它 的 长 度 。

有 关 引 用 计 数 的 更 多 信 息 , 参 见 下 面 的 文 章 :

  • “ W in 32 SDK 程 序 员 参 考 ” 中 的“ 通 过 引 用 计 数 来 管 理 对

    象 的 生 命 周 期 ” 。

  • “ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 实 现 引 用 计 数 ” 。

  • “ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 管 理 引 用 计 数 的 规 则 ”

请 参 阅 CString::GetBuffer, CString::ReleaseBuffer

CString::GetLength int GetLength( ) const; 返 回 值

返 回 字 符 串 中 的 字 节 计 数 。

说 明

此 成 员 函 数 用 来 获 取 这 个 CString 对 象 中 的 字 节 计 数 。 这 个 计 数 不 包 括 结 尾 的

空 字 符 。

对 于 多 字 节 字 符 集 ( MBC S ) , GetLength 按 每 一 个 8 位 字 符 计 数 ; 即 , 在 一 个多 字 节 字 符 中 的 开 始 和 结 尾 字 节 被 算 作 两 个 字 节 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::GetLength 。

// CString::GetLength 示例

CString s( "abcdef" );

ASSERT( s.GetLength() == 6 );

请 参 阅 CString::IsEmpty

CString::Insert

int Insert( int nIndex , TCHAR ch ); throw( CMemoryException );

int Insert( int nIndex , LPCTSTR pstr ); throw( CMemoryException );

返 回 值

返 回 被 改 变 的 字 符 串 的 长 度 。

参 数

nIndex

某 个 字 符 的 索 引 , 在 这 个 字 符 的 前 面 将 要 进 行 插 入 操 作 。

ch

要 插 入 的 字 符 。

pstr

一 个 指 向 要 被 插 入 的 子 字 符 串 的 指 针 。

说 明

此 成 员 函 数 用 来 在 字 符 串 中 的 给 定 索 引 处 插 入 一 个 单 个 字 符 或 一 个 子 字 符 串 。nIndex 参 数 标 识 了 将 要 被 移 走 以 给 字 符 或 子 串 空 间 的 第 一 个 字 符 。 如 果 nIndex 是 零 , 则 插 入 将 方 式 在 这 个 字 符 串 之 前 。 如 果 nIndex 大 于 字 符 串 的 长 度 , 则 函数 将 把 当 前 的 字 符 串 与 由 chpstr 指 定 的 新 字 符 串 连 接 起 来 。

示 例

// 下面的例子说明了如何使用 CString::Insert 。CString str( “ HockeyB est ” );

int n = str.Insert( 6, “ is ” ); ASSERT( n == str.GetLength( ) );

printf( “ 1: %s\n ” , ( LPCTSTR ) str ); n = str.Insert( 6, ' ' );

ASSERT( n == str.GetLength( ) ); printf ( “ 2: %s\n ” , (LPCTSTR) STR );

n = str.Insert(555, ‘1 ’ );

ASSERT( n == str.GetLength ( ) ); printf ( “ 3: %s\n ” , ( LPCTSTR ) str );

// 上面的代码将产生下面这些输出行:

  1. Hockeyis Best

  2. Hockey is Best

  3. Hockey is Best!

请 参 阅 CString::Delete, CString::operator +

CString::IsEmpty BOOL IsEmpty( ) const; 返 回 值

如 果 CString 对 象 的 长 度 为 0 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

说 明

此 成 员 函 数 用 来 测 试 一 个 CString 对 象 是 否 是 空 的 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::IsEmpty。

// CString::IsEmpty 示例

CString s;

ASSERT( s.IsEmpty() );

请 参 阅 CString::GetLength

CString::Left

CString Left( int nCount ) const; throw( CMemoryException );

返 回 值

返 回 一 个 包 含 指 定 范 围 字 符 的 拷 贝 的 CString 对 象 。 注 意 , 返 回 的 CString 对象可 能 是 空 的 。

参 数

nCount

要 从 这 个 CString 对 象 中 提 取 的 字 符 数 。

说 明

此 成 员 函 数 用 来 从 此 CString 对 象 中 提 取 最 前 面 的 nCount 个 字 符 , 并 返 回 被 提取 的 子 字 符 串 的 拷 贝 。 如 果 nCount 超 过 了 字 符 串 的 长 度 , 则 整 个 字 符 串 都 被提 取 。 Left 类 似 与 Basic LEFT $函数 ( 除 了 索 引 是 从 零 开 始 的 ) 。

对 于 多 字 节 字 符 集 ( MBC S ) , nCount 指 的 是 每 8 位 字 符 的 个 数 , 即 , 在 一 个

多 字 节 字 符 中 开 始 和 结 尾 字 节 被 算 作 两 个 字 符 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::Left。

// CString::Left 示例

CString s( _T("abcdef") ); ASSERT( s.Left(2) == _T("ab") );

请 参 阅 CString:: M id, CString::Right

CString::LoadString

BOOL LoadString( UINT nID ); throw( CMemoryException );

返 回 值

如 果 加 载 资 源 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

nID

一个 Windows 字 符 串 资 源 ID 。

说 明

此 成 员 函 数 用 来 读 取 一 个 由 nID 标 识 的 W indows 字 符 串 资 源 , 并 放 入 一 个 已 有的 CString 对 象 中 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::LoadString 。

// CString::LoadString 示例

#define IDS_FILENOTFOUND 1

CString s;

if (! s.LoadString( IDS_FILENOTFOUND ))

{

AfxMessageBox("Error Loading String: IDS_FILENOTFOUND");

...

}

CString::LockBuffer LPTSTR LockBuffer( ); 返 回 值

返 回 一 个 指 向 CString 对 象 的 指 针 , 或 者 是 一 个 以 NULL 结 尾 的 字 符 串 。

说 明

此 成 员 函 数 用 来 加 锁 缓 冲 区 内 的 一 个 字 符 串 。

通 过 调 用 LockBuffer, 可 以 创 建 一 个 字 符 串 的 拷 贝 , 然 后 将 引 用 计 数 设 置 为 -1 。当 引 用 计 数 被 设 置 为 -1 时 , 缓 冲 区 中 的 字 符 串 被 认 为 是 处 于“ 加 锁 ” 状 态 。 当

该 字 符 串 处 于 加 锁 状 态 时 , 字 符 串 被 从 两 个 方 面 得 到 保 护 :

  • 没 有 其 它 的 字 符 串 能 够 获 得 对 此 加 锁 字 符 串 中 的 数 据

    的 引 用 , 即 使 是 该 字符 串 被 赋 予 了 加 锁 字 符 串 。

  • 加 锁 字 符 串 将 不 能 引 用 其 它 的 字 符 串 , 即 使 另 一 个 字

    符 串 被 拷 贝 到 该 加 锁字 符 串 中 。

通 过 加 锁 缓 冲 区 中 的 字 符 串 , 可 以 保 证 该 字 符 串 对 缓 冲 区 的 独 占 保 持 完 整 。

在 你 完 成 了 对 LockBuffer 的 使 用 之 后 , 调 用 UnlockBuffer 来 将 该 引 用 计 数 恢 复到 1 。

有 关 引 用 计 数 的 更 多 信 息 , 参 见 下 面 的 文 章 :

  • “ W in 32 SDK 程 序 员 参 考 ” 中 的“ 通 过 引 用 计 数 来 管 理 对

    象 的 生 命 周 期 ” 。

  • “ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 实 现 引 用 计 数 ” 。

  • “ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 管 理 引 用 计 数 的 规 则 ”

请 参 阅 CString::UnlockBuffer, CString::GetBuffer, CString::ReleaseBuffer

CString::MakeLower void MakeLower( ); 说 明

此 成 员 函 数 将 此 CString 对 象 转 换 为 一 个 小 写 字 符 串 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::MakeLowe r。

// CString::MakeLower 示例CString s( "ABC" ); s.MakeLower();

ASSERT( s == "abc" );

请 参 阅 CString:: M akeUpper

CString::MakeReverse

void MakeReverse( );

说 明

此 成 员 函 数 将 此 CString 对 象 中 的 字 符 的 顺 序 颠 倒 过 来 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::MakeReverse 。

// CString::MakeReverse 示 例

CString s( "abc" ); s.MakeReverse();

ASSERT( s == "cba" );

CString::MakeUpper

void MakeUpper( );

说 明

此 成 员 函 数 将 此 CString 对 象 转 换 为 一 个 大 写 字 符 串 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::MakeUpper。

// CString::MakeUpper 示例CString s( "abc" ); s.MakeUpper();

ASSERT( s == "ABC" );

请 参 阅 CString:: M akeLower

CString::Mid

CString Mid( int nFirst ) const; throw( CMemoryException );

CString Mid( int nFirst, int nCount ) const; throw( CMemoryException );

返 回 值

返 回 一 个 包 含 指 定 范 围 字 符 的 拷 贝 的 CString 对 象 。 注 意 , 这 个 返 回 的 CString

对 象 可 能 是 空 的 。

参 数

nFirst

此 CString 对 象 中 的 要 被 提 取 的 子 串 的 第 一 个 字 符 的 从 零 开 始 的 索 引 。

nCount

要 从 此 CString 对 象 中 提 取 的 字 符 数 。 如 果 没 有 提 供 这 个 参 数 , 则 字 符 串

的 其 余 部 分 都 被 提 取 。

说 明

此 成 员 函 数 从 此 CString 对 象 中 提 取 一 个 长 度 为 nCount 个 字 符 的 子 串 ,从 nFirst

( 从 零 开 始 的 索 引 ) 指 定 的 位 置 开 始 。 此 函 数 返 回 一 个 对 所 提 取 的 字 符 串 的 拷贝 。 M id 类 似 于 Basic MID $函 数 ( 除 了 索 引 是 从 零 开 始 的 ) 。

对 于 多 字 节 字 符 集 ( MBC S ) , nCount 指 的 是 每 8 位 字 符 的 数 目 ; 也 就 是 说 , 在 一 个 多 字 节 字 符 中 开 始 和 结 尾 字 节 被 算 作 两 个 字 符 。

示 例

下 面 的 例 子 说 明 了 如 果 如 何 使 用 CString:: M id 。

// CString::Mid 示例

CString s( _T("abcdef") );

ASSERT( s.Mid( 2, 3 ) == _T("cde") );

请 参 阅 CString::Left, CString::Right

CString::OemToAnsi

void OemToAnsi( );

说 明

此 成 员 函 数 将 此 CString 对 象 中 的 所 有 字 符 由 OEM 字 符 集 转 换 成 ANSI 字 符集 。 参 见 “ Microsoft Visual C++ 6.0 库 参 考 ” 中 的 “ M icrosoft Visual C++ 6.0 语言 参 考 手 册 ” 卷 中 的 “ ANSI 字 符 代 码 表 ” 。

如 果 定 义 了 _UNICODE , 则 这 个 函 数 是 无 效 的 。

请 参 阅 CString::AnsiToOem

CString::ReleaseBuffer

void ReleaseBuffer( int nNewLength = -1 );

参 数

nNewLength

此 字 符 串 的 以 字 符 数 表 示 的 新 长 度 , 不 计 算 结 尾 的 空 字 符 。 如 果 这 个 字符 串 是 以 空 字 符 结 尾 的 , 则 参 数 的 缺 省 值 - 1 将 把 CString 的 大 小 设 置 为字 符 串 的 当 前 长 度 。

说 明

使 用 ReleaseBuffer 来 结 束 对 由 GetBuffer 分 配 的 缓 冲 区 的 使 用 。 如 果 你 知 道 缓冲 区 中 的 字 符 串 是 以 空 字 符 结 尾 的 , 则 可 以 省 略 nNewLength 参 数 。 如 果 字 符串 不 是 以 空 字 符 结 尾 的 , 则 可 以 使 用 nNewLength 指 定 字 符 串 的 长 度 。 在 调 用

ReleaseBuffer 或 其 它 CString 操 作 之 后 , 由 GetBuffer 返 回 的 地 址 是 无 效 的 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::ReleaseBuffer。

// CString::ReleaseBuffer 示例

CString s; s = "abc";

LPTSTR p = s.GetBuffer( 1024 );

strcpy(p, "abc"); // 直接使用该缓冲区

ASSERT( s.GetLength() == 3 ); // 字符串长度 = 3 s.ReleaseBuffer(); // 释放多余的内存,现在 p 无效。ASSERT( s.GetLength() == 3 ); // 长度仍然是 3

请 参 阅 CString::GetBuffer

CString::Remove

int CString::Remove ( TCHAR ch );

返 回 值

返 回 从 字 符 串 中 移 走 的 字 符 数 。 如 果 字 符 串 没 有 改 变 则 返 回 零 。

参 数

ch

要 从 一 个 字 符 串 中 移 走 的 字 符 。

说 明

此 成 员 函 数 用 来 将 ch 实 例 从 字 符 串 中 移 走 。 与 这 个 字 符 的 比 较 是 区 分 大 小 写的 。

示 例

// 从一个句子中移走小写字母 'c':

CString str ( “ This is a test .” ); int n = str.Remove( 't ' ); ASSERT( n == 2 );

ASSERT( str == “ This is a es. ” );

请 参 阅 CString::Replace

CString::Replace

int Replace( TCHAR chOld , TCHAR chNew );

int Replace( LPCTSTR lpszOld , LPCTSTR lp szNew );

返 回 值

返 回 被 替 换 的 字 符 数 。 如 果 这 个 字 符 串 没 有 改 变 则 返 回 零 。

参 数

chOld

要被 chNew 替 换 的 字 符 。

chNew

要 用 来 替 换 chOld 的 字 符 。

lpszOld

  • 个 指 向 字 符 串 的 指 针 , 该 字 符 串 包 含 了 要 被 lpszNew

    替 换 的 字 符 。

lpszNew

  • 个 指 向 字 符 串 的 指 针 , 该 字 符 串 包 含 了 要 用 来 替 换

    lpszOld 的 字 符 。

说 明

此 成 员 函 数 用 一 个 字 符 替 换 另 一 个 字 符 。函 数 的 第 一 个 原 形 在 字 符 串 中 用 chNew 现 场 替 换 chOld 。 函 数 的 第 二 个 原 形 用 lpszNew 指 定 的 字 符 串 替 换 lpszOld 指 定的 子 串 。

在 替 换 之 后 , 该 字 符 串 有 可 能 增 长 或 缩 短 ; 那 是 因 为 lpszNewlp sz Old 的 长 度不 需 要 是 相 等 的 。 两 种 版 本 形 式 都 进 行 区 分 大 小 写 的 匹 配 。

示 例

// 第一个例子, old 和 new 具有相同的长度。

CString strZap( “ C - - ” );

int n = strZap.Replace( '- ', '+ ' ); ASSERT( n == 2 ); ASSERT(strZap == “ C++ ” );

// 第二个例子, old 和 new 具有不同的长度。

CString strBang( “ Everybody likes ice hockey ” ); n = strBang.Replace( “ hockey ” , “ golf ” ); ASSERT( n ==1 );

n = strBang.Replace ( “ likes ” , “ plays ” ); ASSERT( n == 1 );

n = strBang.Replace( “ ice” , NULL ); ASSERT( n == 1 );

ASSERT( strBang == “ Everybody plays golg ” );

// 注意,现在在你的句子中有了一个额外的空格。

// 要移走这个额外的空格,可以将它包括在要被替换的字符串中,例如, “ ice ”。

请 参 阅 CString::Remove

CString::ReverseFind

int ReverseFind( TCHAR ch ) const;

返 回 值

返 回 此 CString 对 象 中 与 要 求 的 字 符 匹 配 的 最 后 一 个 字 符 的 索 引 ; 如 果 没 有 找到 需 要 的 字 符 则 返 回 -1 。

参 数

ch

要 搜 索 的 字 符 。

说 明

此 成 员 函 数 在 此 CString 对 象 中 搜 索 与 一 个 子 串 匹 配 的 最 后 一 个 字 符 。 此 函 数

类 似 于 运 行 时 函 数 strrchr。

示 例

// CString::ReverseFind 示例

CString s( "abcabc" );

ASSERT( s.ReverseFind( 'b' ) == 4 );

请 参 阅 CString::Find, CString::FindOneOf

CString:: Right

CString Right( int nCount ) const; throw( CMemoryException );

返 回 值

返 回 一 个 包 含 指 定 字 符 拷 贝 的 CString 对 象 。 注 意 , 这 个 返 回 的 CString 对 象 可能 是 空 的 。

nCount

要 从 这 个 CString 对 象 中 提 取 的 字 符 数 目 。

说 明

此 成 员 函 数 用 来 从 此 CString 对 象 中 提 取 最 后 ( 最 右 边 ) 的 nCount 个 字 符 , 并返 回 此 提 取 字 符 串 的 一 个 拷 贝 。 如 果 nCount 超 过 了 字 符 串 的 长 度 , 则 提 取 整个 字 符 串 。 Right 类 似 于 Basic 的 RIGHT $ 函数 ( 除 了 索 引 是 从 零 开 始 的 ) 。

对 于 多 字 节 字 符 集 ( MBC S ) , nCount 指 的 是 每 8 位 字 符 的 数 目 ; 也 就 是 说 , 在 一 个 多 字 节 字 符 中 开 始 和 结 尾 字 节 被 算 作 两 个 字 符 。

下 面 的 例 子 说 明 了 如 何 使 用 CString::Righ t。

// CString::Right 示例

CString s( _T("abcdef") ); ASSERT( s.Right(2) == _T("ef") );

请 参 阅 CString:: M id, CString::Left

CString:: SetAt

void SetAt( int nIndex , TCHAR ch );

参 数

nIndex

CString 对 象 中 的 某 个 字 符 的 从 零 开 始 的 索 引 。 nIndex 参 数 必 须 大 于 或 等于 0 , 小 于 由 Getlength 的 返 回 的 值 。 M icrosoft 基 础 类 库 的 测 试 版 本 将 检

nIndex 的 边 界 , 而 Release 版 本 则 不 检 验 。

ch

要 插 入 的 字 符 。

说 明

你 可 以 将 一 个 CString 对 象 看 作 是 一 个 字 符 数 组 。 SetAt 成 员 函 数 重 写 由 一 个 索引 值 指 定 的 单 个 字 符 。 如 果 索 引 超 出 了 已 有 字 符 串 的 边 界 , SetAt 不 会 扩 大 这个 字 符 串 。

请 参 阅 CString::GetAt, CString::operator [ ]

CString:: SetSysString

BSTR SetSysString( BSTR* pbstr ) const;

返 回 值

返 回 新 的 字 符 串 。

参 数

pbstr

一 个 指 向 字 符 串 的 指 针 。

说 明

此 成 员 函 数 重 新 分 配 由 pbstr 所 指 向 的 BSTR , 并 将 包 括 结 尾 的 空 字 符 在 内 的CString 对 象 中 的 内 容 拷 贝 到 该 BSTR 中 。 由 pbstr 所 引 用 的 BSTR 的 值 可 能 会发 生 变 化 。 如 果 内 存 不 足 , 此 函 数 将 抛 出 一 个 CMemoryException 异 常 。

这 个 函 数 通 常 被 用 来 为 OLE 自 动 化 改 变 通 过 引 用 传 递 的 字 符 串 的 值 。

有 关 W indows 中 的 OLE 重 分 配 函 数 的 更 多 信 息 , 参 见 “ W in32 SDK OLE 程序员 参 考 ” 中 的 ::SysReallocStringLen 和 ::SysFreeString 。

CString:: SpanExcluding

CString SpanExcluding( LPCTSTR lpszCharSet ) const; throw( CMemoryException );

返 回 值

返 回 一 个 子 字 符 串 , 该 子 串 保 存 了 在 CString 字 符 串 中 但 又 不 在 lpszCharSet 字符 集 合 中 的 字 符 , 该 子 串 以 字 符 串 的 第 一 个 字 符 作 为 开 始 , 以 在 此 字 符 串 中 发现 的 第 一 个 也 在 lpszCharSet 字 符 集 中 字 符 前 面 的 字 符 作 为 结 尾 ( 也 就 是 说 , 从此 字 符 串 的 第 一 个 字 符 开 始 , 直 到 第 一 个 也 包 括 在 lpszCharSet 字 符 集 的 字 符 为止 , 但 不 包 括 这 个 也 在 lpszCharSet 字 符 集 中 的 字 符 ) 。 如 果 CString 中 的 每 一

个 字 符 都 不 在 lpszCharSet 字 符 集 合 中 , 则 返 回 整 个 字 符 串 。

参 数

lpszCharSet

一 个 被 解 释 为 字 符 集 的 字 符 串 。

说 明

此 成 员 函 数 用 来 查 找 整 个 CString 对 象 中 的 字 符 串 , 找 出 lpszCharSet 指 定 的 字符 集 中 任 何 字 符 第 一 次 出 现 的 位 置 。 SpanExcluding 提 取 并 返 回 这 个 lpszCharSet 字 符 集 中 的 字 符 第 一 次 出 现 之 前 的 所 有 字 符 ( 换 句 话 说 , 来 自 lpszCharSet 字 符集 的 字 符 以 及 在 它 之 后 的 字 符 串 都 不 会 被 返 回 ) 。 如 果 在 此 字 符 串 中 没 有 发 现来 自 lpszCharSet 字 符 集 的 字 符 , 则 SpanExcluding 返 回 整 个 字 符 串 。

下 面 的 函 数 返 回 src 参 数 的 第 一 个 部 分 。

// 由一个分号 (;),一个逗号 ( , ) ,一个句号 ( . ) ,一个破折号 ( - ),

// 或一个冒号 ( : ) 划定界线的部分。

CString GetFirstPart( CString src)

{

return src.SpanExcluding( ";,.- :");

}

请 参 阅 CString::SpanIncluding

CString:: SpanIncluding

CString SpanIncluding( LPCTSTR lpszCharSet ) const; throw( CMemoryException );

返 回 此 字 符 串 中 的 一 个 子 字 符 串 , 该 子 串 中 的 字 符 也 在 lpszCharSet 字 符 集 中 字符 集 中 。 该 子 串 开 始 于 字 符 串 中 的 第 一 个 字 符 , 当 发 现 第 一 个 不 是 lpszCharSet 字 符 集 中 的 字 符 时 结 束 。 如 果 字 符 串 中 的 第 一 个 字 符 就 不 是 指 定 字 符 集 中 的 字符 , 则 SpanIncluding 返 回 一 个 空 的 子 字 符 串 。

参 数

lpszCharSet

一 个 被 解 释 为 字 符 集 的 字 符 串 。

说 明

此 成 员 函 数 用 来 从 字 符 串 中 提 取 字 符 , 提 取 的 子 字 符 串 开 始 于 字 符 串 中 的 第 一个 字 符 , 其 字 符 都 是 由 lpszCharSet 指 定 的 字 符 集 中 的 。 如 果 字 符 串 的 第 一 个 字

个 连 续 字 符 序 列 , 它 们 都 是 该 字 符 集 中 的 字 符 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::SpanIncluding。

// CString::SpanIncluding 示例

CString str( "cabbage" );

CString res = str.SpanIncluding( "abc" ); ASSERT( res == "cabba" );

res = str.SpanIncluding( "xyz" ); ASSERT( res.IsEmpty( ) );

请 参 阅 CString::SpanExcluding

CString:: TrimLeft

void TrimLeft( );

void CString:: TrimLeft( TCHAR chTarget );

参 数

chTarget

要 被 整 理 的 目 标 字 符 。

lpszTargets

指 向 一 个 字 符 串 的 指 针 , 该 字 符 串 包 含 了 要 被 整 理 的 目 标 字 符 。

说 明

这 个 成 员 函 数 的 没 有 参 数 的 版 本 用 来 将 字 符 串 最 前 面 的 空 格 修 整 掉 。 当 在 没 有参 数 的 情 况 下 调 用 时 , TrimLeft 删 除 换 行 符 , 空 格 和 tab 字 符 。

这 个 成 员 函 数 的 需 要 参 数 的 版 本 用 来 将 一 个 特 定 的 字 符 或 一 群 特 定 的 字 符 从 字符 串 的 开 始 处 删 除 。

指 南 ” 中 的 “ 字 符 串 主 题 ” 。

请 参 阅 CString:: M id, CString::Left, CString::Right,

CString::MakeUpper, CString::MakeLower, CString::MakeReverse, CString::Format

CString:: TrimRight

void Trim Righ t( );

void CString:: Trim Right ( TCHAR chTarget ); void CString:: TrimRight( LPCTSTR lpszTargets );

参 数

chTarget

要 被 整 理 的 目 标 字 符 。

lpszTargets

说 明

这 个 成 员 函 数 的 没 有 参 数 的 版 本 用 来 将 字 符 串 最 后 面 的 空 格 修 整 掉 。 当 在 没 有参 数 的 情 况 下 调 用 时 , Trim Right 从 字 符 串 中 删 除 换 行 符 , 空 格 和 tab 字 符 。

这 个 成 员 函 数 的 需 要 参 数 的 版 本 用 来 将 一 个 特 定 的 字 符 或 一 群 特 定 的 字 符 从 字符 串 的 结 尾 处 删 除 。

示 例

CString strBefore;

CString strAfter;

strBefore = " Hockey is Best!!!! " ; strAfter = strBefore; str.TrimRight('!' );

printf ( " Before: \ " %s\" \n " ,(LPCTSTR) strBefore );

printf ( " After: \ " %s\ " \n " ,(LPCTSTR) strBefore );

strBefore = " Hockey is Best?!?!?!?!" ; strAfter = strBefore;

str.TrimRight( ‘ ?!’ );

printf ( " Before: \ " %s\" \n " ,(LPCTSTR) strBefore ); printf ( " After: \ " %s\" \n " ,(LPCTSTR) str After );

在 上 面 的 第 一 个 例 子 中 , 字 符 串“ Hockey is Best!!!! ”变成 了“ Hockey is Bes t” 。

在 上 面 的 第 二 个 例 子 中 , 字 符 串 “ Hockey is Best?!?!?!?!” 变 成 了 “ Hockey is Best ”。

更 多 的 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 “ 字 符 串 主 题 ” 。

请 参 阅 CString::TrimLeft, CString::Mid, CString::Left, CString::Right, CString::MakeUpper,

CString::MakeLower, CString::MakeReverse, CString::Format

CString:: UnlockBuffer void UnlockBuffer( ); 说 明

此 成 员 函 数 用 来 解 锁 先 前 通 过 调 用 LockBuffer 加 锁 的 的 缓 冲 区 。 UnlockBuffer

将 引 用 计 数 恢 复 为 1 。

CString 析 构 函 数 使 用 UnlockBuffer 来 保 证 当 析 构 函 数 被 调 用 时 缓 冲 区 不 会 被加 锁 。

请 参 阅 CString::LockBuffer, CString::GetBuffer, CString::ReleaseBuffer

操 作 符

CString::operator =

const CString& operator =( const CString& stringSrc ); throw( CMemoryException );

const CString& operator =( TCHAR ch ); throw( CMemoryException );

const CString& operator =( const unsigned char* psz );

throw( CMemoryException );

const CString& operator =( LPCWSTR lpsz ); throw( CMemoryException );

const CString& operator =( LPCSTR lpsz ); throw( CMemoryException );

说 明

这 个 CString 赋 值 操 作 符 ( = ) 用 新 的 数 据 来 初 始 化 一 个 已 经 存 在 的 CString 对

象 。 如 果 目 标 字 符 串 ( 即 左 边 的 字 符 串 ) 已 经 具 有 足 够 大 的 空 间 来 保 存 新 数 据 , 则 不 用 进 行 新 的 内 存 分 配 。 不 管 你 什 么 时 候 使 用 这 个 赋 值 操 作 符 , 都 要 小 心 可能 出 现 的 内 存 异 常 , 因 为 常 常 要 为 保 存 新 的 结 果 给 CString 对 象 分 配 内 存 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::operator = 。

// CString::operator = 示例

CString s1, s2; // 空的 CString 对象

s1 = "cat" // s1 = "cat"

s2 = s1; // s1 and s2 each = "cat"

s1 = "the " + s1; // 或者是表达式

s1 = 'x'; // 或者只是单个的字符

请 参 阅 CString::CString

operator LPCTSTR ( ) const;

返 回 值

返 回 一 个 指 向 字 符 串 的 数 据 的 字 符 指 针 。

说 明

这 个 非 常 有 用 的 强 制 操 作 符 提 供 了 一 种 非 常 有 效 的 方 法 来 访 问 存 放 在 CString 对 象 中 的 以 空 字 符 结 尾 的 C 字 符 串 。 此 函 数 不 拷 贝 字 符 而 仅 返 回 一 个 指 针 。 如果 你 在 获 取 指 针 之 后 修 改 此 CString 对 象 , 则 可 能 导 致 内 存 被 重 新 分 配 , 并 使该 指 针 无 效 。

friend CArchive& operator <<( CArchive& ar , const CString& string ); throw( CArchiveException );

friend CArchive& operator >>( CArchive& ar , CString& string ); throw( CArchiveException );

friend CDumpContext& operator <<( CDumpContext& dc, const CString& string );

说 明

CString 插 入 操 作 符 ( << ) 支 持 向 一 个 存 档 进 行 诊 断 转 储 和 存 储 。 提 取 操 作 符支 持 从 一 个 文 档 中 进 行 装 入 。

CDumpContext 操 作 符 只 有 在 M icrosoft 基 础 类 库 的 调 试 版 中 才 有 效 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::operator <<, >> 。

// CString::operator <<, >>示例

extern CArchive ar;

CString s( "abc" );

#ifdef _DEBUG

afxDump << s; // Prints the value (abc) afxDump << &s; // Prints the address

#endif

if( ar.IsLoading() ) ar >> s;

else

ar << s;

请 参 阅 CDumpContext

CString::operator +

friend CString operator +( const CString& string1 , const CString& string2 ); throw( CMemoryException );

friend CString operator +( const CString& string , TCHAR ch ); throw( CMemoryException );

friend CString operator +( TCHAR ch , const CString& string );

throw( CMemoryException );

friend CString operator +( const CString& string, LPCTSTR lpsz ); throw( CMemoryException );

friend CString operator +( LPCTSTR lpsz , const CString& string ); throw( CMemoryException );

返 回 值

返 回 一 个 CString 对 象 , 该 对 象 是 此 连 接 操 作 的 临 时 结 果 。 这 个 返 回 值 使 得 在一 个 表 达 式 中 组 合 多 次 连 接 成 为 可 能 。

参 数

string, string1 , string2

要 连 接 的 CString 对 象 。

ch

将 被 连 接 到 一 个 字 符 串 之 后 的 或 将 在 其 后 连 接 一 个 字 符 串 的 字 符 。

lpsz

指 向 一 个 以 空 字 符 结 尾 的 字 符 串 的 指 针 。

说 明

此 + 操 作 符 将 两 个 字 符 串 连 接 起 来 并 返 回 一 个 CString 对 象 。 两 个 参 数 中 的 一 个必 须 是 一 个 CString 对 象 , 而 另 一 个 可 以 是 指 向 字 符 的 指 针 或 是 一 个 字 符 。 不管 你 什 么 时 候 使 用 这 个 连 接 操 作 符 , 都 要 小 心 可 能 出 现 的 内 存 异 常 , 因 为 为 了保 存 这 个 临 时 结 果 常 常 要 分 配 新 内 存 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::operator + 。

// CString::operator + 示例CString s1( "abc" ); CString s2( "def" );

ASSERT( (s1 + s2 ) == "abcdef" ); CString s3;

s3 = CString( "abc" ) + "def" ; // Correct s3 = "abc" + "def";

// 错了!第一个参数必须是一个 CString 。

请 参 阅 CString::operator +=

CString::oeprator +=

const CString& operator +=( const CString& string ); throw( CMemoryException );

const CString& operator +=( TCHAR ch ); throw( CMemoryException );

const CString& operator +=( LPCTSTR lpsz ); throw( CMemoryException );

参 数

string

将 连 接 到 此 字 符 串 之 后 的 CString 对 象 。

ch

将 连 接 到 此 字 符 串 之 后 的 一 个 字 符 。

lpsz

指 向 将 连 接 到 此 字 符 串 之 后 的 的 字 符 串 的 指 针 。

说 明

此 += 连 接 操 作 符 将 字 符 连 接 到 此 CString 字 符 串 之 后 。 += 操 作 符 可 以 接 受 另 一个 CString 对 象 , 一 个 指 向 字 符 的 指 针 或 一 个 字 符 作 为 参 数 。 不 管 你 什 么 时 候使 用 这 个 连 接 操 作 符 , 都 要 小 心 可 能 出 现 的 内 存 异 常 , 因 为 常 常 要 为 添 加 到 这个 CString 对 象 的 字 符 分 配 内 存 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::operator += 。

// CString::operator += 示例

CString s( "abc" );

ASSERT( ( s += "def" ) == "abcdef" );

请 参 阅 CString::operator +

CString Comparison Operators

BOOL operator ==( const CString& s1 , const CString& s2 ); BOOL operator ==( const CString& s1 , LPCTSTR s2 ); BOOL operator ==( LPCTSTR s1 , const CString& s2 ); BOOL operator !=( const CString& s1 , const CString& s2 ); BOOL operator !=( const CString& s1 , LPCTSTR s2 ); BOOL operator !=( LPCTSTR s1 , const CString& s2 ); BOOL operator <( const CString& s1 , const CString& s2 ); BOOL operator <( const CString& s1 , LPCTSTR s2 ); BOOL operator <( LPCTSTR s1 , const CString& s2 ); BOOL operator >( const CString& s1 , const CString& s2 ); BOOL operator >( const CString& s1 , LPCTSTR s2 ); BOOL operator >( LPCTSTR s1 , const CString& s2 ); BOOL operator <=( const CString& s1 , const CString& s2 ); BOOL operator <=( const CString& s1 , LPCTSTR s2 );

BOOL operator <=( LPCTSTR s1 , const CString& s2 ); BOOL operator >=( const CString& s1 , const CString& s2 ); BOOL operator >=( const CString& s1 , LPCTSTR s2 ); BOOL operator >=( LPCTSTR s1 , const CString& s2 );

返 回 值

如 果 字 符 串 满 足 比 较 条 件 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

s1, s2

要 比 较 的 CString 对 象 。

说 明

这 些 比 较 操 作 符 用 来 比 较 两 个 字 符 串 。 它 们 是 区 分 大 小 写 的 Compare 成 员 函 数的 方 便 的 代 用 符 。

// CString 比较操作符示例

CString s1( "abc" ); CString s2( "abd" );

ASSERT( s1 < s2 ); // Operator is overloaded for both. ASSERT( "ABC" < s1 ); // CString and char* ASSERT( s2 > "abe" );

CString::operator [ ]

TCHAR operator []( int nIndex ) const;

参 数

nIndex

字 符 串 中 的 一 个 字 符 的 从 零 开 始 的 索 引 。

你 可 以 将 一 个 CString 对 象 看 作 是 一 个 字 符 数 组 。 此 重 载 下 标 操 作 符 ( []) 返 回由 nIndex 中 的 从 零 开 始 的 索 引 值 指 定 的 一 个 字 符 。 此 操 作 符 是 GetAt 成 员 函 数的 惯 用 的 代 用 符 。

示 例

下 面 的 例 子 说 明 了 如 何 使 用 CString::operator [ ] 操 作 符 。

// CString::operator [ ] 示例

CString s( "abc" );

ASSERT( s[1] == 'b' );

请 参 阅 CString::GetAt, CString::SetAt