c++ - 对象的内部结构是什么(EDIT : MFC) CString class?

标签 c++ mfc format cstring

我需要 strncpy()(有效地)从(编辑:MFC)CString 对象到 C 字符串变量。众所周知,strncpy() 有时无法正确终止 objective-c 字符串(取决于源长度 **EDIT 和调用中指定的长度)。为了避免这种邪恶,我正在考虑在 CString 源对象中存储一个 NUL 字符,然后将其存储到 strcpy()memmove() 那个家伙。

这样做是否合理?如果是这样,我必须在 CString 对象内部操作什么?如果不是,那么有什么替代方法可以保证正确终止 objective-c 字符串?

最佳答案

strncpy() 只有当源字符串长于您指定的长度限制时,才会“失败”以 null 终止目标字符串。您可以通过自己将其最后一个字符设置为 null 来确保目标以 null 终止。例如:

#define DEST_STR_LEN 10

char dest_str[DEST_STR_LEN + 1];  // +1 for the null
strncpy(dest_str, src_str, DEST_STR_LEN);
dest_str[DEST_STR_LEN] = '\0';

如果 src_str 的长度超过 DEST_STR_LEN 个字符,dest_str 将是一个正确终止的 DEST_STR_LEN 字符串人物。如果 src_str 比那个短,strncpy() 将在 dest_str 中的某处放置一个空终止符,所以最后的空是无关紧要的,无害。

关于c++ - 对象的内部结构是什么(EDIT : MFC) CString class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9445978/

相关文章:

c++ - 在 Visual Studio 2008 Pro 和 Standard 版本中编译项目有区别吗?

time - x 轴上的 Gnuplot 日期和时间

c++ - 相同的键盘键作为两个相反操作的快捷方式

C++ 指针延迟声明语法

c# - 如何 Hook MFC CWnd 创建

c++ - 如何给 mdb 文件一个版本

python - 如何在python中通过多种格式格式化日期字符串

ios - 将字符串格式化为 HH :mm in Swift

c++ - 我如何为多种键类型专门化标准映射?

c++ - EXPECT_CALL(mock, f(N)) vs f(K) 后跟 f(N)