如何在 C++ 中将数组 char 复制到字符串或 int* (void *) 中? [关闭]

Posted

技术标签:

【中文标题】如何在 C++ 中将数组 char 复制到字符串或 int* (void *) 中? [关闭]【英文标题】:How to copy array char into string or int* (void *) in c++? [closed] 【发布时间】:2015-01-04 11:02:12 【问题描述】:

我有多个 char 数组要复制到一个字符串或 void * 或 int * 中。例如,

char c1[] = "Hello";
char c2[] = "World";
char c3[] = "!!!!";

我想复制到一个 int* (void*) 或字符串中。

【问题讨论】:

您能详细说明一下吗?为什么要将字符串复制成整数(int *)? 至于std::string,你稍微看一下就很简单了。 这里是如何将其复制到字符串***.com/questions/8960087/… @JoachimPileborg 你好,我是 C++ 初学者。我从一个 udp 连接收到消息。他们给我发送字节[],我收到字符[]。我试过了,如果我打印到 int[] 中,那将是正确的。所以我认为是否有某种方式直接将 char[] 复制到 int* 中而无需循环。 【参考方案1】:

我认为最简单的方法如下

#include <iostream>
#include <string>
#include <cstring>

int main() 

    char c1[] = "Hello";
    char c2[] = "World";
    char c3[] = "!!!!"; 

    size_t n = 0;

    for ( char *t :  c1, c2, c3  ) n += strlen( t );

    std::string s;
    s.reserve( n );

    for ( char *t :  c1, c2, c3  ) s += t;

    std::cout << s << std::endl;


    return 0;

输出是

HelloWorld!!!!

【讨论】:

这不是最简单的方法。它可能(也可能不会)比s = string(c1)+c2+c3 更快,但肯定不会更简单。 @Mike Seymour 这是一个简单且非常清晰的代码。而且它足够高效。至少这是这里建议的最佳解决方案。 好的,但是您可以删除一半,保持其余部分不变,并获得相同的结果(可能更有效,可能更少)。那无疑会更简单。除非您已经证明这会带来必要的性能改进,否则无需测量和保留大小。 @Mike Seymour 没问题。如果您确定保留内存不会提高效率,您可以删除前半部分代码:) @Mike Seymour 这种方法很好,因为它是一种通用方法。例如,可以有一个向量或其他字符串或字符数组容器,而不是初始化列表。【参考方案2】:

在 C++ 中,您可以简单地使用 + operator 附加字符串

string a = "abc";
string b = "dfg";
string c = a + b;
cout << c << endl;

【讨论】:

【参考方案3】:

使用 C++ 的 std::stringstd::stringstream 命名空间类会更容易:

#include <sstream>
#include <string>

std::string c1("Hello");
std::string c2("World");
std::string c3("!!!!");

std::stringstream ss;
ss << c1 << c2 << c3;

std::string finalString = ss.str();

您不能将它们复制到int*void*,因为它们是完全不同的类型。

【讨论】:

当然,如果您只是玩弦乐,则不需要stringstreamc1 + c2 + c3 可以胜任。如果您还想格式化数字、用户定义的类型等,请使用流。 感谢您指出我无法复制到 void * 或 int *,这很有帮助

以上是关于如何在 C++ 中将数组 char 复制到字符串或 int* (void *) 中? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将字符串转换为 char 数组?

如何在 C++ 中将数字字符串拆分为数组? [复制]

如何在 C++ 中将 char 指针附加到 std::string

在C中将奇数索引元素从一个数组复制到另一个数组

C++ 将 std::string 复制到没有空终止的 char 数组

C++ linux套接字,在一次调用中将字符串数组(char**)作为连接字符串发送