在运行时调整char []的大小

时间:2009-08-30 21:07:07

标签: c++

我需要在运行时将char array[size]调整为char array[new_size]

我该怎么做?

6 个答案:

答案 0 :(得分:17)

如果你使用std::vector<char>而不是数组,那么你想要的功能只是该类型的另一种方法。

答案 1 :(得分:6)

假设char array[size]malloc'ed ....您可以使用realloc

示例(摘自OpenBSD的手册页):

newsize = size + 50;
if ((newp = realloc(p, newsize)) == NULL) {
   free(p);
   p = NULL;
   size = 0;
   return (NULL);
}
p = newp;
size = newsize;

答案 2 :(得分:2)

您必须分配一个新数组并将现有数组的内容复制到该数组。你不能简单地使现有的数组更大

答案 3 :(得分:2)

这样的事情:

class HangUpGame {
    char *palabra;
    size_t palabra_size;

    public:
        HangUpGame(){
            palabra = new char[DEFAULT_SIZE];
            palabra_size = DEFAULT_SIZE;
        }
        virtual ~HangUpGame(){
            delete [] palabra;
        }

        void Resize(size_t newSize){
            //Allocate new array and copy in data
            char *newArray = new char[newSize];
            memcpy(newArray, palabra, palabra_size);

            //Delete old array
            delete [] palabra;

            //Swap pointers and new size
            palabra = newArray;
            palabra_size = newSize;
        }
};

对于对其他答案的评论,实际上最好的方法是使用STL容器。但无论如何,如果你更喜欢使用数组,那么用一个更大的数组交换当前数组是很容易的(在内部,STL容器无论如何都会做到这一点)。

答案 4 :(得分:1)

删除旧数组(如果有),然后分配一个新数组:

char* array = (char*)malloc(sizeof(char) * number_of_chars_in_word);

答案 5 :(得分:0)

好的,感谢所有答案,我通过为新的char数组创建一个新的空间来解决我的问题。 感谢