我不是如何使用联合在这里打印整数数组。请纠正我以解决问题。
正在正确打印val.str - ' + 100-100-100 + 760'并且输出数组的第一个元素似乎正确加载了值。然后覆盖相同的内存并打印一些垃圾值,这是我不知道如何解决的问题。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
//Variable Decalartion
int i = 0, x = 100, y = -100, z = -100, p = 760;
int len_str;
char temp[4];
union Data{
char str[16];
unsigned int buff[8];
};
void Init(union Data val, unsigned int *dest);
int main(void){
union Data val;
unsigned int x[8];
Init(val,x);
for (i = 0; i < 8; i++)
{
printf("0x%04X ",x[i]);
}
return 0;
}
void Init(union Data val, unsigned int *dest)
{
len_str = sizeof(val.str);
sprintf(temp,"%+04d",x);
strcpy(val.str,temp);
sprintf(temp,"%+04d",y);
strcat(val.str,temp);
sprintf(temp,"%+04d",z);
strcat(val.str,temp);
sprintf(temp,"%+04d",p);
strcat(val.str,temp);
printf("%s\n",val.str);
printf("\n");
for (i = 0; i < len_str+1; i += 2)
{
val.buff[i / 2] = ((unsigned int)(unsigned char)val.str[i] << 8) |
(unsigned int)(unsigned char)val.str[i + 1];
dest[i / 2] = val.buff[i / 2];
}
}
显示的输出是
+100-100-100+760
0x2B31 0x401111C8 0x8049A58 0x8048782 0x0001 0xBFFB5E74 0xBFFB5E7C 0x401B0E4D
谢谢,
AKHIL
答案 0 :(得分:1)
此代码中存在许多严重错误。
正如user694733所指出的那样,char temp[4];
太小了。那里有缓冲区溢出。
您拨打此电话:Init(val,x);
,其中包含val
中的单位化数据。
请注意,sizeof
int
是特定于平台的。你似乎认为它是16bits
?
在PC和现代ARM处理器上32bits
。但在低端处理器上可能是16bits
。
答案 1 :(得分:-1)
最后我解决了,请找到代码,
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
//Variable Decalartion
int x = 1000, y = -1000, z = -1000, p = 760;
char temp[6];
union Data {
char str[21];
unsigned int buff[20];
};
void Init(union Data val);
int main(void){
union Data val;
Init(val);
return 0;
}
void Init(union Data val)
{
sprintf(temp,"%+05d",x);
strcpy(val.str,temp);
sprintf(temp,"%+05d",y);
strcat(val.str,temp);
sprintf(temp,"%+05d",z);
strcat(val.str,temp);
sprintf(temp,"%+05d",p);
strcat(val.str,temp);
printf("%s\n",val.str);
printf("\n");
printf("%s\n",val.buff);
printf("\n");
}
输出,
+1000-1000-1000+0760
+1000-1000-1000+0760