【语言-C++】关于CString 函数GetLength()返回值等于0

代码解读

CString 函数GetLength()

	int GetLength() const throw()
	{
		return( GetData()->nDataLength );
	}


CString的字符串长度是存在一个nDataLength(int型)的变量中,而nDataLength(int型)不是实时更新的,我们再看下面一个函数ReleaseBuffer

CString 函数ReleaseBuffer()

	void ReleaseBuffer(_In_ int nNewLength = -1)
	{
		if( nNewLength == -1 )
		{
			int nAlloc = GetData()->nAllocLength;
			nNewLength = StringLengthN( m_pszData, nAlloc);
		}
		SetLength( nNewLength );
	}
CString的ReleaseBufferbuffer函数中有一个SetLength,设置字符串长度,我们再看一下SetLength函数


CString 函数SetLength(int nLength)

	void SetLength(_In_ int nLength)
	{
		ATLASSERT( nLength >= 0 );
		ATLASSERT( nLength <= GetData()->nAllocLength );

		if( nLength < 0 || nLength > GetData()->nAllocLength)
			AtlThrow(E_INVALIDARG);

		GetData()->nDataLength = nLength;
		m_pszData[nLength] = 0;
	}

可以看出在SetLength函数中,nDataLength(int型)的变量被重新附上当前字符串申请空间的长度。因此可得,在使用GetLength()之前最好是使用ReleaseBuffer()强制刷新一下nDataLength(int型)变量,避免不必要的错误发生。

示例:

void fun( CString str)
{
	str.ReleaseBuffer();
	if (str.GetLength() > 0)
	{
		//Do...
	}
}





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: C++中没有cstring的format函数。但是可以使用其他方法来实现字符串格式化,比如使用sprintf函数或者使用C++11中的std::stringstream类。 sprintf函数可以将格式化的字符串输出到一个字符数组中,例如: ```c++ char str[100]; int num = 10; sprintf(str, "The number is %d", num); ``` 这样就可以将num的值插入到字符串中,生成一个新的字符串。 std::stringstream类可以将多个数据类型转换成字符串,并且可以使用流操作符<<来插入数据,例如: ```c++ #include <sstream> #include <string> std::stringstream ss; int num = 10; std::string str = "hello"; ss << "The number is " << num << " and the string is " << str; std::string result = ss.str(); ``` 这样就可以将num和str的值插入到字符串中,生成一个新的字符串。 ### 回答2: cstring的format函数C++的一个格式化字符串函数,用来在字符串中插入各种类型的变量或常量。使用该函数可以方便地将多个变量或常量格式化为一个字符串,然后输出到控制台或文件中。该函数支持各种格式控制符,比如%s、%d、%f等,可以满足不同的输出需求。 使用cstring的format函数需要引入头文件<cstring>,然后以格式化字符串为第一个参数调用该函数,后面可以跟上多个变量或常量作为参数。格式化字符串中的每个控制符都用%开头,紧跟着一个字母表示要输出的数据类型。例如%d表示输出整数,%f表示输出小数,%s表示输出字符串等等。 在实际应用中,我们常常需要将多个变量或常量格式化为一个字符串输出,比如向用户显示一则状态提示信息、记录程序的日志等。由于字符串的可读性和易用性,format函数成为了C++程序员必备的工具之一。 需要注意的是,如果格式化字符串中包含多个控制符,那么每个控制符都需要对应一个参数。例如,格式化字符串中有两个%s控制符,那么在调用函数的时候需要传入两个参数,分别对应这两个控制符。 总之,cstring的format函数是一个非常实用的格式化字符串函数,可以帮助C++程序员轻松地将多个变量或常量格式化为一个字符串,简化代码编写,提高程序效率。 ### 回答3: C语言的cstring库中有一个format函数,常用于字符串格式化输出。它可以将多个参数按照格式化字符串的格式进行转换输出成一个字符串。 format函数的调用格式为:`sprintf(目标字符串,格式化字符串,参数列表)`。其中,目标字符串为要输出的字符串,格式化字符串为指定输出格式的字符串,参数列表可以是一个或多个变量。 格式化字符串中可以包含格式控制符,用来指定如何输出参数。常见的格式控制符有:%d表示输出整数,%f表示输出浮点数,%s表示输出字符串,%c表示输出字符等等。 以下是一些示例: ```c char str[50]; int a = 3; float b = 3.14; sprintf(str, "a=%d,b=%f", a, b); //输出:"a=3,b=3.140000" char str2[50]; char* name = "Tom"; sprintf(str2, "My name is %s", name); //输出:"My name is Tom" char str3[50]; char c = 'A'; sprintf(str3, "%c的ASCII码为%d", c, c); //输出:"A的ASCII码为65" ``` 需要注意的是,format函数不会检查数组边界,因此在使用时需要确保目标字符串数组足够大,而且格式控制符和参数列表应该一一对应,否则会导致不可预知的错误。 总之,C语言中的format函数使得字符串的格式化输出变得十分便捷,可以大大提高程序的可读性和易用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值