如何使用变量作为其大小来声明char数组?

时间:2015-03-12 10:21:58

标签: c++ c arrays

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语言

5 个答案:

答案 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();
}