c++从作为函数参数传递的变量字符串创建字符数组
c++ Create Char Array from Variable String passed as function parameter
我想用传入的字符串在函数中创建一个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];
}
}
相关文章:
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 从字符串变量中逐字符读取单词
- 对函数 PlaySound 使用字符串变量
- C++中的字符串变量
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 我可以用字符串变量而不是它的名字创建容器吗? C++
- 字符串变量的大小
- 为什么我的字符串变量没有打印完整的字符串?
- 字符串变量未更新 c++
- 如何使用 setfill 和 setw 在字符串变量中存储十六进制值
- 在.cpp文件之间传递全局字符串变量?
- 字符串变量顺序
- 为什么可以将整数分配给字符串变量?
- 在qt创建器中调试时如何访问字符串变量的完整值?
- 将字符串变量分配给无符号字符变量
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- C++我应该用什么来保存格式化为字符串变量(如sprintf())的文件
- 我有一个字符串变量单词= "APA"
- 将字符串变量从 bash 脚本传递到根宏