将int复制到Char数组

时间:2011-11-15 09:07:32

标签: c pointers buffer

我有这个缓冲区用于存储一些不同类型的数据:

int d;
char *current_Results;
char Results[1000];
current_Results = Results;

现在,我将下一个数据复制到此缓冲区:

d = 50;
memcpy(current_Results, &d, sizeof(d));
printf("Current data is - %d\n", (int)(*current_Results));   // "Current data is - 50" Output OK!.

(current_Results)+= sizeof(d);

d = -20;
memcpy(current_Results, &d, sizeof(d));
printf("Current data is - %d\n", (int)(*current_Results));   // "Current data is - 1" Output WRONG!.
(current_Results)+= sizeof(d);
... and so on - wrong output later on...

我做错了什么?

3 个答案:

答案 0 :(得分:2)

我们可以用三种方式指向一个指向数组的指针。

第一种方法是从数组中取出第一个元素,并将其地址赋给指针

current_Results = &Result[0];

第二种方法就是使用数组名称。几乎在所有情况下数组名称本身都给出了数组基址..

current_Results = Result;

第三种方式,你现在使用的..使用&运算符在数组基地址上。我认为编译时会收到警告,对吧?

current_Results = &Result;

在前两种方式中,实际上是创建一个普通的char指针,当我们递增指针时,它将以一个char的大小(大多数系统上为1个字节)递增。 ie如果current_Results指向地址1000,则current_Results ++将指向1001。

在第三种情况下,您实际创建的是字符数组指针(每个指针大小为1000字节)。当你递增它时,它将增加1000(这是你的数组大小)。即指针按数据类型递增 ..在前两种情况下,您的数据类型为char *,但在第三种情况下,通过赋值,您将current_Results的数据类型设为char [1000]。所以它将从数组中递增出来。只需打印地址current_Result,

printf("%u\n",current_Results);

看看它是否以你想象的方式递增。那你就明白了。希望这能帮到你

答案 1 :(得分:0)

如果你有current_results = Results;,它对我有用。

答案 2 :(得分:-2)

(int)(*current_Results)不会将您在该位置找到的字节解释为您所期望的整数。它取在那里找到的一个角色并将其转换为int。你的意思可能是*(int*)current_Results

但是你在这里做的所有事情可能都没有明确定义,因为你正试图访问int*和任意对齐。不要那样做。