c++从作为函数参数传递的变量字符串创建字符数组

c++ Create Char Array from Variable String passed as function parameter

本文关键字:字符串 变量 创建 字符 数组 参数传递 函数 c++      更新时间:2024-09-27

我想用传入的字符串在函数中创建一个char数组。

bool foo(string s1, string s2) {
char s1_char_array[] = s1;
char s2_char_array[] = s2;
}

但我遇到了

"Initialization with '{...}' expected for aggregate object."

对于这两个声明。

我尝试了很多变通方法,但它们都有自己的错误。学习C++和我发现的每一个教程都有硬编码的价值。如何做到这一点?

您可以动态分配数组并从那里的字符串中复制数据。

#include <string>
#include <cstring> // for strcpy()
#include <algorithm> // for std::copy()
using std::string;
bool foo(string s1, string s2) {
// allocate arrays (+1 for terminating null-characters)
char* s1_char_array = new char[s1.size() + 1];
char* s2_char_array = new char[s2.size() + 1];
// copy data to arrays
#if 0
// if the strings are guaranteed not to contain ''
strcpy(s1_char_array, s1.c_str());
strcpy(s2_char_array, s2.c_str());
#else
// if the strings may contain ''
std::copy(s1.begin(), s1.end(), s1_char_array);
std::copy(s2.begin(), s2.end(), s2_char_array);
s1_char_array[s1.size()] = '';
s2_char_array[s2.size()] = '';
#endif

// do things with the arrays
// deallocate the arrays
delete[] s1_char_array;
delete[] s2_char_array;
// return something
return false;
}

坏消息是,通常无法从std::string创建数组变量,因为std::string可以表示任何大小的字符串(存在很大的实际限制,但在64位系统上首先会耗尽内存(,并且该大小是动态的,即在运行时确定。相反,数组的大小必须在编译时已知,此时字符串的大小仍然未知。

另一个问题是,您的阵列具有自动存储功能,可用于自动存储的内存非常有限——在台式机/服务器上通常为一到几兆字节;潜在地在嵌入式上少得多——而字符串所拥有的动态内存没有这样的限制,因此试图将大字符串放入自动存储中可能很容易导致"错误";堆栈溢出";。

另一个问题是,数组既不能复制构造,也不能从其他类型转换,因此char s1_char_array[] = some_variable;永远无法工作。


好消息是你也不需要这么做。std::string内部已经包含一个char的数组,因此不需要创建新的数组。只需继续使用字符串中的数组即可。

这就是我的想法。您必须使用string.lenght()函数和来声明与字符串相同的字符数组大小

然后使用循环将字符串元素逐个索引复制到char数组索引

bool foo(string s1, string s2) {

char s1_char_array[s1.length()] ;
char s2_char_array[s2.length()] ;
for(int i=0; i<s1.length(); i++){
s1_char_array[i]=s1[i];
}
for(int i=0; i<s2.length(); i++){
s2_char_array[i]=s1[i];
}
}