1
10
因为:
这是为了通过
稍后,当您试图修改指针指向的内存时,这是未定义的行为。 通常,字符串文本将存储在只读内存中以允许进行某些优化,任何修改它们的尝试都将导致访问冲突。
你很可能会发现它会起作用的。 然而,你的班级真的应该 为了字符串本身的目的-仅仅一个指针是不安全的,因为传递给您该指针的代码也可以更改它的内容。 为了更安全,您应该更改代码:
|
2
2
字符串文本是常量(利用不推荐的自动转换
在实践中,访问冲突发生是因为新版本的VC++将字符串文本放在可执行文件的一部分中,该部分在内存中被映射为只读(这无疑是一件好事),并且试图写入它的任何结果(正确地)都在访问冲突中。
解决方案
复制
传递给构造函数的字符串(顺便说一句,它应该接受
:在实际的项目中,不要重新发明轮子,使用一个好的预先制作的字符串类,比如
|
3
2
不应该像上面那样复制字符串文本地址。行为未定义。
确保在String类的析构函数中删除它。 |
4
1
您试图指定给字符串文字。它们不是char*,而是const char*。试图修改字符串文本是未定义的行为。 |
5
0
“test”是常量字符串,不能写入。 s=x; 尝试执行strcpy,这样s将拥有x的非常量副本,而不是常量原件。 |
6
0
不能通过使用[]访问来修改“test”字符串。 错误是s[i]=什么。 在构造函数中,必须在内部为句柄“test”字符串文本分配空间,然后可以使用[]运算符修改单字符访问。 要解决的示例(使用基本复制):
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |