char* mystrcat2(char* source, char* target) {
int count = strlen(source) + strlen(target) + 1;
char arr[count];
//...
}
我想创建一个char数组,但VS2013告诉我一个错误,计数应该是一个常量。我使用的是VS2013,这是一个带C ++的win32控制台应用程序。
如果这样的代码没问题:
char arr[100];
如何使用变量声明char数组? 最近我通过阅读C编程语言"
来学习C语言答案 0 :(得分:2)
您始终可以使用动态分配
char *array;
size_t length;
length = strlen(source) + strlen(target) + 1;
array = malloc(length);
if (array == NULL)
abort_DoNot_Use_array();
/* use `array' here */
free(array); /* don't forget this */
答案 1 :(得分:1)
您的确切问题是
如何使用变量声明char数组?
因此,即使在C ++中使用std :: string通常更好,我会回答你的确切问题(在C ++假设下,因为你已经有了一个C-answer(malloc / free)。
C ++中没有可变大小的数组,因为我们有STL类std :: vector。你需要做的是动态分配内存。
示例:
char* mystrcat2(char* source, char* target)
{
char* pChar = new char[strlen(source) + strlen(target) + 1];
// ...
return pChar;
}
当你完成从这个函数返回的char指针时,你不能忘记调用
delete[] pChar;
备注:在C ++ 11中,通常不建议使用原始指针(就像我们在此示例中所做的那样),因为您通过std :: unique_ptr(例如)进行自动资源管理。
答案 2 :(得分:0)
作为C ++的新手,我建议使用std :: string而不是char *。你的代码可能是这样的。
#include <iostream>
#include <string>
using namespace std;
string mystrcat2(const string& source, const string& target) {
return source + target;
}
int main() {
cout << mystrcat2("Peter", "Kamps");
return 0;
}
答案 3 :(得分:0)
ShowInactivePayees
允许g++
中的 C99 可变长度数组作为语言扩展。但标准C++
不支持它。
最佳选项为C++
或std::vector
。
答案 4 :(得分:0)
另一种方法
char * mystrcat2(char * source, char * target) {
std::string result(source);
result += target;
return result.c_str();
}
C ++ 11版
char * mystrcat2(char * source, char * target) {
return (to_string(source) + target).c_str();
}