我需要在运行时将char array[size]
调整为char array[new_size]
。
我该怎么做?
答案 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)