我的筋膜怎么了?
What's wrong with my strcpy?
我试着自己制作strcpy
。它应该工作,我甚至复制并粘贴了(几乎准确的代码)从有人在这里发布关于strcpy
。两者都给我一个"分割错误"。
char* strcpy(char * destination, const char * source)
{
while( (*destination++ = *source++) != ' ' )
;
return destination;
}
这段代码有什么问题?
char* a = "hello";
cout << strcpy(a, "Haha") << endl;
您正在尝试覆盖字符串文字。这会导致未定义的行为。将a
声明为数组:
char a[] = "hello";
您的strcpy
实现也有一个错误(假设正常语义)。它应该返回一个指向目标缓冲区起始的指针,而不是指向结束
您正在尝试写入数据段,因为"hello"
存储在那里。
因此,当你调用strcpy
时,你会得到分段错误。
试题:
char a[] = "hello";
cout << strcpy(a, "Haha") << endl;
。
编辑:在你的strcpy
函数中,在复制之后,destination
将指向字符串的结束,你需要返回字符串的开始。
a
是一个指向字符串文字的指针:
char* a = "hello";
尝试修改字符串文字是未定义的行为。正如Carl所建议的,如果用字符串字面值初始化一个数组,它将工作:
char a[] = "hello" ;
除了上面和下面提到的关于字符串字面量的所有内容之外,您还返回了指向字符串的END的指针,因此即使您避免了分割错误,您也将打印"。
相关文章:
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- clang整洁10忽略了我的NOLINT命令
- 反向功能超出了我的 cpp 程序的范围
- 为什么创建服务器后C++ httplib 库阻塞了我的主线程?
- 插入一个基本的单向链表节点似乎破坏了我的 c++ 代码?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 谷歌测试发现在macOSX上添加并运行了我的所有测试两次
- 为什么STL优先级队列错误地分配了我的类对象
- 我需要做一个深度复制,我是否正确使用了我的复制构造函数?
- c_str() 只读取了我的字符串的一半,为什么?我该如何解决这个问题?是字节问题吗?
- 为什么QTableView扩展选择忽略了我的默认选择行
- 为什么Linux报告了我的应用程序的内存使用情况
- C++中的类/函数模板占用了我的二进制文件的百分比是多少?
- 为什么此串行/调制解调器代码弄乱了我的终端显示
- QT在UI文件中恢复了我的更改
- 为什么虚拟功能打破了我的铸造
- 我怎么知道我的服务器是否在一段时间内没有连接
- <vector> 搞砸了我的快速排序
- MySQL C ++连接器在我插入数据库时减少了我的字符串
- 为什么返回数据结构而不是指针弄乱了我的数据的完整性