首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何组合一个宽字符的字符串,并在中间插入一些空字符?

如何组合一个宽字符的字符串,并在中间插入一些空字符?
EN

Stack Overflow用户
提问于 2018-07-30 02:55:26
回答 1查看 96关注 0票数 1

让我们从背景开始。我需要为ODBC命令设置一个属性字符串:

代码语言:javascript
复制
SQLConfigDataSource(hwndParent, ODBC_ADD_DSN, sDriver, wcAttrs);

属性必须以一种严格的方式进行格式化才能工作:

代码语言:javascript
复制
LPCWSTR wcAttrs = L"DSN=NiceDB\0DBQ=C:\\Users\\who\\AppData\\Local\\NiceApp\\niceDB.accdb\0";

以这种方式硬编码是可行的,但我实际上需要动态设置accdb文件(DBQ)的路径。问题是需要使用空字符来分隔字符串中的属性,而我主要使用wcscat_s的string-fu技巧失败了,因为空字符会使后面的任何内容消失。

用中间的那些空字符组装/连接字符串的最好技术是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 03:20:47

您可以在构建时将一个空字符push_back到std::wstring中。

示例:

代码语言:javascript
复制
std::wstring str;
str += L"DSN=NiceDB";
str.push_back(L'\0');
str += L"DBQ=C:\\Users\\who\\AppData\\Local\\NiceApp\\niceDB.accdb";
str.push_back(L'\0');

您还可以使用+=运算符手动追加null字符:

代码语言:javascript
复制
std::wstring str;
str += L"DSN=NiceDB";
str += L'\0';
str += L"DBQ=C:\\Users\\who\\AppData\\Local\\NiceApp\\niceDB.accdb";
str += L'\0';

您也可以只告诉append方法使用字符串文字的+1个字符。这将使用源代码中已有的空字符隐式填充std::string:

代码语言:javascript
复制
std::wstring str;
const wchar_t* header = L"DSN=NiceDB";
const wchar_t* footer = L"DBQ=C:\\Users\\who\\AppData\\Local\\NiceApp\\niceDB.accdb";

str.append(header, wcslen(header) + 1);
str.append(footer, wcslen(footer) + 1);

然后获取指向最后一个字符串开头的指针:

代码语言:javascript
复制
LPCWSTR wcAttrs = str.c_str();

.c_str()返回的指针的有效性仅在支持wstring的生命周期内有效。在仍有引用wcAttrs的内容时,不要让wstring实例超出作用域。

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

https://stackoverflow.com/questions/51583540

复制
相关文章

相似问题

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