Memcpy字符指针
Memcpy Char Pointers
我有一个简单的程序,我想在其中使用memcpy连接两个字符指针,但我在memcpy行上获得了访问冲突读取位置。
char *first = new char[10], *second=new char[10];
first="Hello ";
printf("second: ");
scanf("%s",&second);
memcpy(first,second,strlen(second)+1);
printf ("Result: %sn", first);
因为复制到常量中会导致违规,所以我尝试了以下操作:
char *first = new char[20], *second="world!";
printf("first: ");
scanf("%s",&first);
memcpy(first,second,strlen(second)+1);
printf ("Result: %sn", first);
这让我可以访问违规写入位置。我应该如何正确连接两个指针?
您的memcpy
相当于memcpy ("Hello ", second, strlen(second)+1);
。复制到常量中(在某些平台上,显然包括您的平台(是一种访问违规。
char *first = new char[10], *second=new char[10];
first="Hello ";
首先,使first
指向您分配的某个内存。然后你把指针扔掉,让它指向一个静态字符串。你不是这个意思。也许你的意思是:
strcpy (first, "Hello ");
这将常量的数据复制到first
指向的空间中。
char * concat(const char * first, const char * second)
{
int lf = strlen(first);
int ls = strlen(second);
int len = lf + ls;
char * rb = new char[len+1];//You need this +1 here
memcpy(rb, first, lf);
memcpy(rb+lf, second, ls);
rb[len] = 0;
return rb;
}
int main ()
{
char *first = new char[10], *second=new char[10];
strcpy(first, "first");//This is an unsafe way. You can take the value from anywhere possible
strcpy(second, "second");//This is an unsafe way. You can take the value from anywhere possible
char * third = concat(first, second);
cout << third << endl;//Don't use cout << concat(first, second) << endl; since it leads to a emory leak
delete [] third;
return 0;
}
如果不使用额外的内存,就无法连接两个字符串,因为每次都需要两个给定字符串的和+1(或更多(的内存块。
更改
scanf("%s", &first);
至
scanf("%s", first);
扫描时访问错误的内存。
相关文章:
- 指向指向字符数组的指针数组的指针
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将字符缓冲区强制转换为函数指针
- 在函数中返回无符号字符数组,但不返回指针
- 将字符逐个分配给指针?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将字符数组复制到 QByte 数组中,而无需传递指针
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- C++指针数组到字符数组中的特定位置
- 如何从链表指针字符中查找字符
- 获取字符数组地址,然后转换为指针字符
- 在指针字符 c++ 中分配字符数组的值
- C 指针字符
- 将向量传递<char>到指针字符*
- 如何修复未对齐的指针(字符**)
- 如何打印指针字符数组
- 指针 *字符和 &字符
- C++指针字符
- C/ c++:从指针字符一维数组中访问单个字符