如何连接两个指向字符串的指针并将其存储在数组或字符中?

Posted

技术标签:

【中文标题】如何连接两个指向字符串的指针并将其存储在数组或字符中?【英文标题】:How to concatenate two pointers to string and store it in an array or characters? 【发布时间】:2017-12-15 18:49:31 【问题描述】:

据我所知,ptr 指向\xFF\xFF。假设ptr的值是(例如0x004E0000),它指向\xFF\xFF,我怎样才能让foo数组包含"\x41\x42\x43\x00\x00\x4E\x00"

代码:

#include <string.h>
#include <iostream>
#include <Windows.h>
int main()

    char foo[20];
    char *alpha = "\x41\x42\x43";
    char *test = "\xFF\xFF";
    void *ptr = VirtualAlloc(NULL, strlen(test), 0x3000, 0x40);
    RtlMoveMemory(lpvAddr, test, strlen(test));

我正在使用 Visual Studio 2017。

【问题讨论】:

你为什么要移动内存而不是复制它? 【参考方案1】:

我假设你只是想:

复制alpha开头的字符串foo 复制test指向的地址,紧跟在foo中的字符串后面

memcpy 是你复制任意对象的朋友,但使用辅助指针会更简单。代码可能是:

char foo[20];
char *alpha = "\x41\x42\x43";
char *test = "\xFF\xFF";
char **pt = &test;       // pt now points to the address where "\xFF\xFF" lies
memcpy(foo, alpha, strlen(alpha));
memcpy(foo + strlen(alpha), pt, sizeof(char *));  // copy the address

但是当心:我刚刚回答了你的问题,但我真的看不到它的真实用例。假设您出于学习目的探索地址副本。

【讨论】:

这就是我想要的,非常感谢兄弟【参考方案2】:

将任何内容复制到 foo 与 VirtualAlloc 有什么关系? 您有一个包含 20 个字符的数组,只需将您想要的值复制到该内存即可。你从来没有声明过 lpvAddr,你的意思是 ptr 吗?

如果你的意思是(lpvAddrto 是 ptr,它会是这样的(尽管以这种方式获取 8 字节地址的高 4 字节似乎完全没有意义):

memcpy(foo, test, 4);
*((PULONG)foo+1) = *((PULONG)&ptr+1);

【讨论】:

以上是关于如何连接两个指向字符串的指针并将其存储在数组或字符中?的主要内容,如果未能解决你的问题,请参考以下文章

获取指向 LLVM-IR 中数组第一个元素的指针

字符串数据进入内存的位置

C++入门经典-例6.14-通过指针连接两个字符数组

如何使用标头 <string.h> 中的 strcat() 来连接两个指针指向的字符串?

如何使用带有指向数组的指针的SCANF?

字符串比较字符指针和字符串的存储位置