2016-03-12 40 views
0

我已经分配了一块内存(char *),我希望能够存储一个整数。将int值存储到char * - C++?

char * arr = new char[50]; 
int num = 9; 

for(int i = 0; i < sizeof(int); i++) 
{ 
     *((int *)arr) = arr[i]; 
} 

memcpy(&arr, &num, sizeof(num)); 

cout<<"Contents of arr: "<<arr<<endl;  

但是,无论何时编译,我似乎都会遇到分段错误。我怎样才能解决这个问题?谢谢!

+0

我想我需要将这些(char *)字节先转换为int字节,才能将int写入该内存块,但我猜测这是错误的。 – user5620123

+0

您的代码存在多个问题。你为什么从0迭代到'sizeof(int)'?你为什么要将值_from_'arr'复制回'arr'?你在循环的右括号中有一个语法错误 - '''代替'}'。根据“[如何提出问题](http://stackoverflow.com/help/how-to-ask)”中的要求,代码必须正确。 – Tony

回答

1

for循环是不必要的。我不确定它试图完成什么。 memcpy是可以的,除了你正在获取已经是指针的arr的地址。这将工作:

char * arr = new char[50]; 
int num = 9; 

memcpy(arr, &num, sizeof(num)); 

cout<<"Contents of arr: "<< ((int *)arr) <<endl; 

也许你的for循环试图做到这一点:

char * arr = new char[50]; 
int num = 9; 

*((int *)arr) = num; 

cout<<"Contents of arr: "<< ((int *)arr) << endl; 

这将是确定的,太。

编辑:数组的内容不能直接打印,至少没有任何意义(并且可能由于没有零终止而崩溃)。假设你想让它看起来像一个整数,我已经编辑了上面的代码。 C++纯粹主义者可能反对使用C风格而不是reinterpret_cast>,但这是一个单独的问题。

+0

谢谢!所以我不会再出现分段错误,但是我的输出显示'',arr:0xfc76230'的内容,'(在我将'num'更改为等于10之后)。有没有办法来解决这个问题? – user5620123

+0

不要忘记考虑潜在的问题。 –

+0

是的,一般而言,对齐方法肯定是该方法的一个问题。没有任何保证新的字符[50]将int整齐排列,尽管它将在大多数编译器上。在使用它之前将值拉回到int中会更好。如果你在一个对齐的平台上,memcpy是一种更安全的方法来将值从缓冲区中提取出来。 –