变量值C++中的奇怪错误

Aks*_*hay 1 c++

我用过这段代码.这里从4开始的位置存在一个字符串,字符串的长度为14.所有这些计算都在此代码之前完成.我正在粘贴包含代码的错误的小片段.

void *data = malloc(4096);
int len = 14;
int fileptr = 4;
string str;
cout<<len<<endl;
cout<<fileptr<<endl;
memcpy(&str, (char *)data+fileptr, len);        
cout<<len<<endl;
cout<<fileptr<<endl;
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

14
4
4012176
2009288233
Run Code Online (Sandbox Code Playgroud)

我在这里从内存中读取一个字符串"System Catalog".它正确显示字符串.但是使用memcpy()函数后,fileptr和len的值突然发生了变化.

Mys*_*ial 7

string是不一样的char*.string是一个对象.所以你不能只是memcpy()数据.所以这段代码的行为是未定义的.

在您的情况下,您将14字节的垃圾数据复制到str并破坏堆栈.结果是你要覆盖垃圾lenfileptr垃圾malloc().

我不确定你要做什么,但是如果你想创建一个字符串,你应该这样做:

string str = "System Catalog";
Run Code Online (Sandbox Code Playgroud)