问题标签 [c-str]

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 投票
0 回答
74 浏览

c++ - 为什么 c_str() 不读取附加的字符串?

我目前正在做一个项目,我将一个 ASCII 图像 .txt 文件发送到一个 mySQL 数据库。我让程序读取 .txt 文件的每一行并将其附加到 mySQL 命令字符串。一切都很好,直到我将字符串转换为 c_string 以供 mySQL 读取。在第一行之后,以下行没有以附加的字符串结尾,我不太清楚为什么会这样……前一天确实有效,但结果不一致。

我使用的是:Visual Studio 2017 Enterprise C++

查询的示例输出:所有行都以 ') 结尾

query.c_str() 的示例输出:仅在第一行之后以 ') 结尾

mysql 的示例输出:仅显示第一行

编辑 在我的代码通过图像到 ascii 转换功能后,不知何故新创建的 txt 文件在每一行的末尾都有空终止符。只需简单地进入文件并在任何行中添加一个空格然后保存它就可以让我的程序功能上工作。我很困惑为什么会这样。

0 投票
3 回答
77 浏览

c++ - 此代码中是否存在悬空指针问题?

这段代码对我来说很好,但是我在其他地方看到这段代码

我想知道哪个是正确的,为什么?

0 投票
1 回答
505 浏览

c++ - 使用 std::string::c_str() 修改底层 std::string 是否安全?

我遇到了一些代码,其中包含以下示例的几个实例:

在这个简化的例子中,有一个 的赋值std::string::c_str(),它返回const char*一个char*使用 的指针const_cast

这似乎按预期工作,并进行了str相应修改。

std::string::c_str()在我本地图书馆的描述如下:

返回指向以 null 结尾的内容的 const 指针。这是内部数据的句柄。不要修改,否则可能会发生可怕的事情

cppreference中,描述包括:

返回指向以空字符结尾的字符数组的指针,该数组的数据与存储在字符串中的数据等效。

...

写入通过访问的字符数组c_str()是未定义的行为。

在标准[string.accessors]中,描述是相似的,并且没有提供关于这个...以空字符结尾的字符数组的信息,其数据与存储在字符串...中的数据等效

而不是澄清问题,这让我更加困惑,什么字符数组?它如何等效?是副本吗?如果是这样,为什么要修改它,还要修改原始字符串?此实现是否已定义?

我想避免更改使用它的所有代码实例的任务,所以我的问题是:

有什么方法可以正确,使用ptr指针修改str字符串是否合法?

0 投票
0 回答
45 浏览

c++ - 单引号和双引号 C++ - 有趣的、意外的行为

当我尝试调试我的 C++ 代码以解决不相关的问题时,我发现了一些非常奇怪的行为。

我在程序的一个阶段打印一个结果,在该阶段我有整数变量'amount'和'coins [i]':

但是,将 * 放在双引号还是单引号中会有所不同。对于双引号,意味着 * 是一个字符串,我们得到:

但对于单身人士,我们得到:

这里发生了什么?

0 投票
2 回答
95 浏览

c++ - c_str() 正在终止我的加密消息有没有办法绕过这个?

我正在使用 RSA 加密消息。

如果我尝试在本地加密/解密消息,一切正常,但是,当将字符串转换为void constant*以便使用这样的socket::send方法时,

发生以下情况,

我原来的字符串,tempMessage

“_��JE<D�p�-d�R�U���`}�+�;����|[�t�����^;D�Mn��?ÕW>...- 6���Pr��[͉dZ%�”

被截断为此,使用时tempMessage.c_str()

“_��JE<D�p�-d�R�U���`}�+�;����|[�”

我知道这是因为,在加密期间,有一个\0符号会在一次或多次之间附加,因此在使用 c_str() 时会终止那里的所有内容。

我也知道它发生在使用 send() 之前,我把它放在这里是为了让你知道我为什么首先使用 c_str()。

有没有办法绕过这个?或解决方法?

我已经看到了这个先前的答案,但对我的情况没有帮助,也找不到任何其他解决方案。

在此先感谢您的帮助!

0 投票
3 回答
155 浏览

c++ - 从字符串中获取 char * 或 const char * 数据会中断 16 个字符或更长的字符串

我有一个函数string_to_char(),它试图给我一个字符串的形式,我可以将它传递到我正在使用的库中,它想要char *(但我认为可以与. 一起使用const char *,所以我一直在尝试两者)。

我为测试我的实现而编写的代码string_to_char()如下:

这是我得到的输出:

因此,出于某种原因,string_to_char()仅适用于 15 个字符或更短的字符串,并且从函数直接输出到 std::cout,但似乎无法将其存储到 16 个字符或更长的变量中。

我对 C++ 比较陌生,所以下面的一些代码对于更有经验的程序员来说可能有点奇怪,但这是我尝试过的代码return (char*) str.c_str();

改为使用const并更改char * result1 = string_to_char(test1);const char * result1 = string_to_char(test1);(与 一样result2),以查看这是否适用于这些其他解决方案:

我从以下方面得到了很多给定的方法:

std::string 到 char*

string.c_str() 是常量吗?

如何将 std::string 转换为 const char* 或 char*?

在 C++ 中从 std::string 转换为 char *

https://www.cplusplus.com/reference/https://en.cppreference.com/w/上阅读一些关于字符串和向量的主题

0 投票
3 回答
136 浏览

c++ - 传递给类时 c_str() 和字符串的奇怪行为

在玩 c-strings 和 std::string 时,我遇到了一种奇怪的行为(我相信这只是对我很好奇,并且存在一个完全有效的 c++ 答案)。通常,当我将字符串传递给类的构造函数时,我会执行以下操作:

到目前为止效果很好,我(也许是天真地?)从未质疑过这种方法。

然后最近我想实现一个简单的包含数据的类,当剥离到它的基本结构时,它看起来像这样:

输出是:

*.c_str()在这里使用它,因为这是我在实际代码库中使用它的方式(即使用 google 测试和EXPECT_STREQ(s1, s2).

当我在主函数中删除*.c_str()时,我得到以下输出:

所以描述的原始字符串被截断,初始字符串丢失。我可以通过将类中的类型更改为:

现在我得到了预期的输出

很好,我可以使用这个解决方案,但我想了解这里发生了什么。另外,如果我将主要功能稍微更改为

我如何在类中存储字符串并不重要DataContainer,即通过 const ref 或 value。在这两种情况下,我得到

以及关于clang的警告:

所以我猜这个问题是由 *.c_str() 本身引起的?但是,我不太明白为什么我不能通过 const ref 存储两个字符串名称和描述。任何人都可以对这个问题有所了解吗?

0 投票
0 回答
48 浏览

c - 在c中实现字符串到int函数

我正在尝试实现标题中所述的功能。我认为我非常接近解决方案,但存在问题。

输入:51% 被录取。输出:x:51(空)

但输出应该是:

s:% 被录取。

我的尝试在这里:

问题是,在主函数中,sPtr 似乎为空,但在驱动程序函数中,sPtr 是 % 被承认,这是它应该是的。如何解决问题,以便在不使用驱动程序函数中的 printf 语句的情况下正确打印解决方案?

编辑:

问题正如@Johnny Mopp 所说,我试图传递该变量的副本。因此,我需要传递在原型中出现 char **sPtr 的 *sPtr 变量的地址。代码应该是:

感谢@Johnny Mopp 和@paulsm4 的贡献

0 投票
1 回答
182 浏览

c++ - 将字符数组转换为字符串时的意外行为

所以我有这个简单的类,它接受一个字符数组并将其解析为一个 JSON 对象。然后它在内部存储该对象并提供一个 getter。

如果我用一些简单的东西来实例化这个类,比如......

它可以工作,但是如果这个字符串增长到 ~1000+ 的长度,当我尝试解析json为一个字符串时,传入的字符数组就会被破坏。

我不知道是什么原因造成的。我想检查的一件事是结尾处是否存在空终止符,json我总能找到它。

感谢帮助!

评论的附加上下文...

这是调用上面构造函数的方法...

然后上堆栈到主函数,注意这一行deserializedData = t->deserialize(serializedData);...

这是用于将 python 对象转换为字符数组的函数。dumps 是来自 pythons json 模块的一种方法。我可能误解了字符数组的生命周期是什么。

0 投票
1 回答
69 浏览

c++ - 意外链接 c_str() 字符串

我正在尝试将一个字符串分配给一个结构值,它可以工作,但该值以某种方式链接到变量:

输出是:

有人可以解释为什么会这样吗?