- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
首先我在做,
#include <iostream>
#include <string>
void foo (std::string s) {
std::cout << s << std::endl;
}
int main () {
char st[] = "0";
st[1] = '[';
std::string s (st);
std::cout << s << std::endl;
return 0;
}
当我使用流插入运算符发送到流对象 cout
时,它显示垃圾(我猜这是一种正常行为)。
然后我通过按值传递给函数 foo
来进行检查。我现在正在做这样的事情。
foo (s);
// after calling foo () value printed by the
// std::cout is changed. it takes care of NULL character ('\0')
std::cout << s << std::endl;
0[
之后不再显示垃圾信息。为什么?
我的问题是,我在foo()
中按值传递了字符串。在运行 foo ()
的主体之前运行一个复制构造函数。但仍然没有意义。这个 copyctor
如何按值更改从 main ()
传递的参数?
提前致谢。
最佳答案
char st[] = "0";
小测验:st
有多大?
答案:两个字符
,一个用于“0
”,一个用于空终止符。
然后你去覆盖空终止符:
st[1] = '[';
...并尝试以此为基础构造一个字符串
:
std::string s (st);
接受 const char*
的 string
构造函数在这里被调用,它的工作方式是寻找 null 终止符。因为你把它吹走了,它会运行到 st
的末尾。运行超过 st
的末尾会引发未定义的行为,这也是您看到垃圾的原因。
重要的是要注意未定义的行为意味着任何都可能发生。这里的“任何事”包括“正是我想要发生的事”。您不一定会得到垃圾输出,或者您的程序会崩溃。试图找出为什么 UB 以这种或那种方式表现出来是一种不合理的努力。
关于c++ - std::string 复制构造函数是否自行在末尾添加空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23411983/
我正在尝试用 Java 构建一个字符串,该字符串的长度最多为 3,最少为 1。 我正在根据整数数组的内容构建字符串,如果数组的内容为 -1,我想在字符串中输出一个空字符。否则字符串将包含整数的字符版本
我有一个类,其中有一个方法可以在字符串中包含 NUL 字符的情况下终止程序。具体表达是这样的: stringVar.indexOf('\u0000') < 0 这个字符串是通过 Scanner 从用户
我有一个 wchar_t 数组。我需要在数组中的特定位置添加一个 unicode 空字符。 wchar_t var1[100]; var1[79] = '\u0000'; 我尝试了上面的方法,但出现以
好吧,这听起来可能是重复的,但我已经尝试了所有可能性,例如 str.strip()、str.rstrip()、str.splitline (),还 if-else 检查像: if str is not
System.out.println("-----------------------------------------------------------"); System.out.pr
我有一个奇怪的问题。我从公司内部的许多不同应用程序接收数据,并将这些数据显示在网站上。根据发送数据的系统,数据本身可能在字符串中包含一些奇怪的字符。我的问题是我有一个用户可以搜索以允许其中包含此数据的
我遇到了 aSSL ,这似乎有几年历史了,想知道是否有人有其他“安全”AJAX 连接代码示例?显然,这不如使用 SSL 证书安全,但使用 null character SSL在那里进行攻击(最近针对
我有一个类似于以下内容的 pyspark 数据框: df = sql_context.createDataFrame([ Row(a=3, b=[4,5,6],c=[10,11,12], d='b
我有以下要执行的查询: MyModel.objects.annotate(current_name=Coalesce('nickname', 'name')).order_by('current_na
每当 rails 变量等于 nil(或者实际上每当我使用 rails 代码(参见第 3 个代码示例))时,我的 html 中就会得到一串空字符。 new.html.haml %h1.editable.
我是一名优秀的程序员,十分优秀!