我需要将数据保存在指定的内存地址中,这些数据恰好是一个 4096 个字符的字符数组。
所以在这里我从uint32_t到空* ptrAddress 中获取内存地址
uint32_t number = 1268;
void* ptrAddress = &number;
在这里,我尝试复制 As 的数组,它有效! 但不是真的,因为我中间有一些垃圾
char tryArray[4096];
for(int i = 0; i < 4095; i++ ){
tryArray[i] = 'A';
}
//EDIT: added the null terminator (forgot to do that)
tryArray[4095] = ' ';
char* copy = strcpy(ptrAddress, (char*)tryArray);
printf("lets see: %sn", copy);
输出(想象 4096 As 和"垃圾"作为一些垃圾字符(:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'garbage''garbage''garbage'AAAAAAAAAAAAAAAAA
在那之后我得到了一个赛格错误
我做错了什么?如果您还需要从代码或我的意图中了解更多内容,请告诉我!
你有几个问题。
首先,此代码:
uint32_t number = 1268;
void* ptrAddress = &number;
不会像您似乎表明您想要的那样指向内存地址1268
的指针。它创建一个指向存储该1268
的整数的指针。然后,您将大量超出该存储,导致未定义的行为,因此之后游戏就结束了。
如果需要指向特定内存地址的指针:
void *ptrAddress = (void *)0x1268;
但是,请确保该地址在您的环境/地址空间中是合法的!
其次,strcpy
适用于以 null 结尾的字符串。如果您计划使用 4096 字节(非 null 终止(缓冲区,则可能应该使用memcpy
。请注意,这意味着您无法使用 printf 进行打印(至少您尝试的方式(。
printf("%-4096s");
应该这样做。