问题标签 [c-strings]

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 投票
18 回答
7805 浏览

c++ - 为什么在 c++ 中使用 c 字符串?

现在有什么好的理由在 C++ 中使用 C 字符串吗?我的教科书在某些时候在示例中使用了它们,我真的觉得使用 std::string 会更容易。

0 投票
19 回答
89859 浏览

c - 为什么写入用字符串文字初始化的“char *s”而不是“char s[]”时会出现分段错误?

以下代码在第 2 行收到 seg 错误:

虽然这工作得很好:

使用 MSVC 和 GCC 测试。

0 投票
16 回答
225027 浏览

c++ - 你如何将 CString 和 std::string std::wstring 相互转换?

CString非常方便,同时std::string更兼容 STL 容器。我正在使用hash_map. 但是,hash_map不支持CStrings 作为键,所以我想将 s 转换CStringstd::string.

编写CString散列函数似乎需要很多时间。

我怎样才能做到这一点?

我对吗?


编辑:

这里有更多问题:

我怎样才能从wstringto转换,CString反之亦然?

这有什么问题吗?

此外,我怎样才能从std::wstringto转换,std::string反之亦然?

0 投票
3 回答
3461 浏览

mysql - MYSQL_ROW 和 row[0] 到字符串类型?

使用 MYSQL C API 查询结果时。结果作为MYSQL_ROW类型返回,根据 MYSQL C API 文档,我可以轻松地printf("%s", row[0]). 但是,如果我想将 的内容传输row[0]到字符串或 char* 中怎么办?

0 投票
4 回答
2157 浏览

c++ - 为什么 c_str() 打印字符串两次?

所以......当我去的时候:

我得到:

但是当我去的时候:

我得到:

为什么?

0 投票
6 回答
912 浏览

c - 将 char** 转换为 char* 或 char

我有一个旧程序,其中使用了一些库函数,但我没有那个库。

所以我正在使用 c++ 库编写该程序。在那个旧代码中,有一些函数是这样调用的

*string = newstrdup("这里有一些字符串");

字符串变量被声明为 char **string;

他可能在那个名为“newstrdup”的函数中做什么?我尝试了很多东西,但我不知道他在做什么......谁能帮忙

0 投票
4 回答
5780 浏览

c - strtol、strtod 不安全吗?

似乎strtol()strtod()有效地允许(并强制)你抛弃字符串中的常量:

上面,我自己没有进行任何演员表。但是,strtol()基本上将 myconst char *放入一个char *for me 中,没有任何警告或任何东西。(事实上​​,它不允许你键入baras a const char *,因此会强制进行不安全的类型更改。)这不是很危险吗?

0 投票
4 回答
4599 浏览

c - char 数组与 char 指针

使用recv通过套接字接收数据时,我注意到:

我收到

消息

“mesg”是我发送的,附加了一些随机字符。

如果我使用

相反,我收到

消息

所以没有随机的东西附加到我的字符串中。我发现如果我使用 char[5] 代替它也可以,但我真的不明白为什么。malloc(4) 真的分配了 5 个字节,第五个是 NUL 吗?

0 投票
3 回答
15063 浏览

c - sprintf(buffer, "%s [...]", buffer, [...]) 安全吗?

我看到在我正在处理的一些代码中使用这种模式连接到一个字符串:

我相当肯定它是不安全的 C。你会注意到buffer它既是输出又是第一个输入。

除了缓冲区溢出的明显可能性之外,我相信不能保证缓冲区在函数的开始和结束之间不会改变(即,不能保证缓冲区的状态在函数的执行)。sprintf 的签名还指定目标字符串是restricted。

我还记得一篇关于memcpy 中投机性写作的报告,我看不出为什么某些 C 库可能会在 sprintf 中做同样的事情。当然,在这种情况下,它将写入其源。那么这种行为安全吗?

仅供参考,我建议:

替换这个。

0 投票
5 回答
1099 浏览

c - 写入 c 字符串

我的代码段错误,我不知道为什么。

gdb 调试器告诉我,问题出在第 6 行,我想将一个字符存储到 c 字符串中(如果我使用左值指针解引用,这是同样的问题。)这就是他所说的:

我正在从 K&R-C 书中学习,这是第 2.8 章中的简化示例(删除功能)。我不知道问题出在哪里。