我试图使用void指针实现memcpy函数.
我的buf1是"苹果",buf2是"香蕉".我期望输出"香蕉"和"香蕉"但是我在*s1_charPtr ++ =*s2_charPtr ++时遇到了分段错误;
我试图调试它,但GDB没有给我一个有用的信息.
我想保留这些规则:
我做错了什么?这是我的代码:
#include <iostream>
using namespace std;
void* memcpy(void* s1, const void* s2, unsigned n){
char* s1_charPtr = static_cast<char*>(s1);
const char* s2_charPtr = static_cast<const char*>(s2);
int i = 0;
while(i < n){
*s1_charPtr++ = *s2_charPtr++;
i++;
}
}
int main(){
char* buf1 = new char[10];
const char* buf2 = new char[10];
buf1 = "apple";
buf2 = "banana";
memcpy(buf1, buf2, 5);
cout << buf1 << "\n" << buf2 << endl;
delete[] buf1;
delete[] buf2;
}
Run Code Online (Sandbox Code Playgroud)
问题是这些任务:
buf1 = "apple";
buf2 = "banana";
Run Code Online (Sandbox Code Playgroud)
在此之后,buf1并且buf2不再指向您之前分配的缓冲区new,它们指向这些文字字符串.文字字符串是常量,因此当您尝试修改"apple"时会出现错误.
你应该做:
strcpy(buf1, "apple");
strcpy(buf2, "banana");
Run Code Online (Sandbox Code Playgroud)
这就是你应该注意编译器警告的原因:
testmemcpy.cpp:18: warning: deprecated conversion from string constant to 'char*'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |