问题标签 [cstring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
54612 浏览

c++ - 将 CString 转换为字符数组?

如何将 MFC 中的 CString 转换为 char[](字符数组)

0 投票
10 回答
475 浏览

c - 如何更安全地编写这个 C 片段?

我有以下 C 代码片段,必须识别错误并建议一种更安全的编写方法:

所以错误是 strlen 忽略'\0'了字符串的尾随,因此不会为副本分配足够的内存,但我不确定他们在更安全地编写它方面的目的是什么?

我可以使用malloc(strlen(somestring)+1))我假设,但我认为必须有比这更好的方法?


编辑:好的,我已经接受了一个答案,我怀疑我们不会期望 strdup 解决方案,因为它不是 ANSI C 的一部分。这似乎是一个相当主观的问题,所以我不确定我是否有接受其实是最好的。无论如何感谢所有的答案。

0 投票
1 回答
837 浏览

visual-c++ - 我应该将 CString 传递给 Format/printf (以及一般的可变参数)吗?

我最近接了一个小型的MCF C++应用程序,它显然处于工作状态。首先,我在代码上运行 PC-Lint,而 lint 抱怨 CStringT 正在传递给 Format。互联网上的意见似乎存在分歧。有人说 CSting 旨在无错误地处理这个用例,但其他人(以及MSDN 文章)说它应该在传递给可变参数函数时始终被强制转换。Stackoverflow 可以就这个问题达成任何共识吗?

0 投票
2 回答
3386 浏览

c++ - URL 转义 MFC 字符串

你如何 URL 转义 MFC CString?

0 投票
2 回答
1503 浏览

c++ - mfc 复制 CString 的某些部分

假设我有一个带有字符串“Bob Evans”的 CString 变量。我想从位置 4 复制到原始 CString 的末尾到一个新的 CString,但是我很难找到语义示例:

我还考虑过将变量original复制到 STL C++ 字符串,但就转换而言,实现这一点也不是那么容易。您对此有何建议?我可以先将字符串存储在 STL 字符串中,但这将是最后的手段之一,因为我不想重组大量代码只是为了将数据存储在 STL 字符串而不是 CString 中。提前致谢。

0 投票
2 回答
408 浏览

visual-c++ - VC++ 6.0 中的已知字符串问题列表

我正在寻找一些包含 VC++ 6.0 中所有与字符串相关的问题的列表,这些问题在以后的服务包中得到了修复,例如这个。任何人都可以在这方面帮助我吗?

我搜索的原因是:我们在基于 VC++ 6.0 的产品中遇到了一些与字符串相关的问题。我正在寻找其他潜在问题。

谢谢。

0 投票
2 回答
1920 浏览

crash - 给定 %d 时,VC++ 6.0 应用程序在 CString::Format 内崩溃

使用 %d 格式说明符执行 CString::Format 操作时,VC++ 6.0 应用程序崩溃。这并不总是发生,而是在应用程序内存增长到 100MB 或更多时发生。当完成 CString 复制时,有时也会观察到相同的崩溃。调用堆栈看起来像这样

mfc42u!CFixedAlloc::Alloc+82

mfc42u!CString::AllocBuffer+3f 00000038 00000038 005b5b64

mfc42u!CString::AllocBeforeWrite+31 00000038 0a5bfdbc 005b5b64

mfc42u!CString::AssignCopy+13 00000038 057cb83f 0a5bfe90

mfc42u!CString::operator=+4b

这会引发访问冲突异常。

0 投票
2 回答
3589 浏览

objective-c - Objective-C 字符串编码问题

好的,我对 C 套接字还很陌生,但我只需要使用多播套接字执行一些简单的 sendto() 和 recvfrom() 调用即可通过网络获取字符串。在环顾四周并阅读了几本指南(包括 Beej 的)之后,我发现下面的代码可以监听通过多播套接字发送的消息(这是我需要的)。该程序在主程序中运行良好,但是当我将其放入项目其他地方的方法(即称为“listenForPackets”的方法)中并尝试在运行循环的另一个线程中运行它时,我的问题就出现了。但是在调试之后,问题归结为变量“mc_addr_str”,该变量在 main 方法中分配为等于 argv[1]。

现在,通过另一个 SO 成员的帮助,我有一个方法可以将 IP 地址作为 NSString 返回给我(我也在程序的其他地方使用它,所以我需要让它返回 NSString)。

我以为我可以做一个简单的小转换

到目前为止,我所拥有的是:

当我这样做时,程序进入 setsockopt 调用,然后失败,错误代码为 -1(我假设这是一个通用错误代码,让程序知道发生了不好的事情并需要中止)。另外,当我在前面的语句中分配 mc_addr_str 时,我得到

我不确定我的问题是从哪里出现的。在分配给 mc_addr_str 期间是否有转换错误,或者我使用了错误的编码?任何输入表示赞赏!

0 投票
8 回答
1555 浏览

c++ - 在变异 c 字符串时避免内存泄漏

出于教育目的,我在一些测试程序中使用 cstrings。我想用“...”之类的占位符来缩短字符串。

也就是说,如果我的最大长度设置为 13,"Quite a long string"将变为"Quite a lo..."。此外,我不想破坏原始字符串 - 因此缩短的字符串必须是副本。

下面的(静态)方法是我想出的。我的问题是:为我的缩短字符串分配内存的类也应该负责释放它吗? 我现在要做的是将返回的字符串存储在单独的“用户类”中,并将内存释放到该用户类。

0 投票
2 回答
1986 浏览

c++ - 为什么在使用 DT_MODIFYSTRING 选项将副本传递给 DrawText 函数时,原始 CString 会被覆盖?

我已经找到了解决这个问题的方法,但只是想知道是否有人知道实际发生了什么导致我看到的问题。我的猜测是它与字符串的可变性有关,但我认为 CString 对象在复制构造函数中解释了这一点。

以下代码导致 mFileName 被覆盖:

发生的情况是第一次调用 UpdateText,GetFilename 返回 C:\temp.txt。假设边界矩形导致文本在第一次调用时被截断为“...\temp.txt”,“...\temp.txt”是第二次调用 UpdateText 时从 GetFilename 返回的内容。

更令人困惑的是,这并没有导致 mFileName 被改变:

GetFilename 始终返回 C:\temp.txt。因此,DrawText 函数似乎以某种方式找到了原始 CString 并对其进行了修改。但是怎么做?

更新:我想我会抛出另一个奇怪的代码块,这也会导致 mFileName 被覆盖:

这似乎应该创建一个新对象并返回该新对象。然而,不知何故,DrawText 仍然覆盖了 mFileName。

如果我将代码更改为以下,我没有任何问题:

似乎可以解决问题的唯一方法是按照我在解决方法中显示的方式构造一个新的 CString。当我通过 DT_MODIFYSTRING 选项时,DrawText 在做什么?