如何解决如何从 strcpy 的函数返回一个 char* 数组并将其存储在另一个 char* 数组中?
我创建了一个 Strcpy 函数来将一个字符串复制到另一个字符串中。当两个 char[] 数组 通过它时它工作得很好,但是当传递 char* 数组时它会出现分段错误(核心转储)错误。如何解决?
#include <iostream>
using namespace std ;
char* Strcpy ( char* s1,const char* s2 )
{
while(*s2 != '\0')
{
*(s1)=*(s2);
s1++;
s2++;
}
*s1='\0';
return s1;
}
int main()
{
/*char t1[]="HelloWorld"; //it is working fine for both these arrays
char t2[]="TestString";*/
char* t1="HelloWorld"; //Segmentation fault
char* t2="TestString";
char* r=Strcpy(t1,t2);
cout<<r<<endl;
cout << t1;
}
解决方法
您的 strcpy 函数适用于这些的原因:
示例 1:
/*
* Header prepended by linux kernel to each event.
* Appears at the front of each packet in DLT_USB_LINUX captures.
*/
typedef struct _usb_header {
uint64_t id;
uint8_t event_type;
uint8_t transfer_type;
uint8_t endpoint_number;
uint8_t device_address;
uint16_t bus_id;
char setup_flag;/*if !=0 the urb setup header is not present*/
char data_flag; /*if !=0 no urb data is present*/
int64_t ts_sec;
int32_t ts_usec;
int32_t status;
uint32_t urb_len;
uint32_t data_len; /* amount of urb data really present in this event*/
pcap_usb_setup setup;
} pcap_usb_header;
而此处(示例 2):
/*
* USB setup header as defined in USB specification.
* Appears at the front of each Control S-type packet in DLT_USB captures.
*/
typedef struct _usb_setup {
uint8_t bmRequestType;
uint8_t bRequest;
uint16_t wValue;
uint16_t wIndex;
uint16_t wLength;
} pcap_usb_setup;
当 Strcpy() 尝试覆盖 BSS 段中的受保护数据时发生段错误。
有几种方法可以解决这个问题。如示例 1 所示,您可以在全局数据空间中为目标字符串分配足够的内存,或者在堆栈上分配内存,或者再次在堆中分配一些内存。
char t1[]="HelloWorld"; // you are defining arrays of characters in the data
char t2[]="TestString"; // segment. This are of memory has read/write access.
// You have effectively allocated and initiaized
// 22 bytes of data in read/write memory.
由于 strcpy() 返回一个指向目标字符串的指针,您已经拥有该指针,因此其返回值不是很有用,通常会被忽略。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。