使用char*[C+;+;]增加数组 我正在处理C++中的动态数组。以下代码的帮助
我试着一个接一个地读这些字符,然后生成C字符串。如果数组大小不够,我会增加它。但是函数increaseArray会出现错误并返回包含其他字符的字符串。我错了什么使用char*[C+;+;]增加数组 我正在处理C++中的动态数组。以下代码的帮助,c++,arrays,pointers,dynamic,char,C++,Arrays,Pointers,Dynamic,Char,我试着一个接一个地读这些字符,然后生成C字符串。如果数组大小不够,我会增加它。但是函数increaseArray会出现错误并返回包含其他字符的字符串。我错了什么 void increaseArray(char* str, int &size){ char* newStr = new char[size * 2]; for (int i = 0; i < size; i++){ newStr[i] = str[i]; } size *=
void increaseArray(char* str, int &size){
char* newStr = new char[size * 2];
for (int i = 0; i < size; i++){
newStr[i] = str[i];
}
size *= 2;
delete[] str;
str = newStr;
}
char* getline()
{
int size = 8;
char* str = new char[size];
char c;
int index = 0;
while (c = getchar()) {
if (index == size) increaseArray(str, size);
if (c == '\n') {
str[index] = '\0';
break;
};
str[index] = c;
index++;
}
return str;
}
void increaseArray(char*str、int和size){
char*newStr=新字符[size*2];
对于(int i=0;i
在函数increaseArray
中,您正在将newStr
分配给str
,但是str
是increaseArray
函数中指针的本地副本,因此在函数外部看不到更改
最简单的修复方法是将increaseArray
签名更改为:
void increaseArray(char*&str,int&size)
因此将传递对指针的引用,因此,对
str
内部increaseArray
的更改将在其外部可见。在函数increaseArray
中,您正在将newStr
分配给str
但是str
是increaseArray
函数中指针的本地副本,因此,更改在其外部不可见
最简单的修复方法是将increaseArray
签名更改为:
void increaseArray(char*&str,int&size)
因此,指针的引用将被传递,因此对str
内部increaseArray
的更改将在其外部可见。您可以这样做。
这很简单
#include <string.h>
#include <stdlib.h>
using namespace std;
void increaseArray(char* &str, int size){
str = (char *)realloc(str,size*2);
}
#包括
#包括
使用名称空间std;
无效增量数组(字符*&str,整数大小){
str=(char*)realloc(str,大小*2);
}
你可以这么做。
这很简单
#include <string.h>
#include <stdlib.h>
using namespace std;
void increaseArray(char* &str, int size){
str = (char *)realloc(str,size*2);
}
#包括
#包括
使用名称空间std;
无效增量数组(字符*&str,整数大小){
str=(char*)realloc(str,大小*2);
}
This“str=newStr;”将局部变量str设置为newStr。该局部变量立即被丢弃。你想要一个指向指针或引用的指针。为什么不使用std::string
甚至std::vector
?“我正试图一个接一个地读取字符并生成C字符串。如果数组大小不够,我就增加它”字面意义上的std::string
。你为什么不使用它,省去麻烦呢?您的代码无法通过我的团队的审核。此“str=newStr;”将局部变量str设置为newStr。该局部变量立即被丢弃。你想要一个指向指针或引用的指针。为什么不使用std::string
甚至std::vector
?“我正试图一个接一个地读取字符并生成C字符串。如果数组大小不够,我就增加它”字面意义上的std::string
。你为什么不使用它,省去麻烦呢?您的代码在我的团队中无法通过审核。不幸的是,这没有多大帮助,因为您忽略了realloc
@ForceBru返回的指针。我忘记了这一点。我已经对此做了必要的更改。事实上,由于OP使用了new[]
来分配内存,他不能使用realloc
,不幸的是,这没有多大帮助,因为您忽略了realloc
@ForceBru返回的指针。我忘记了这一点。我已经对此做了必要的更改。实际上,由于OP使用了new[]
来分配内存,他不能使用realloc
,根据感谢,这确实很有帮助。对指针和参考资料有点困惑。谢谢,这真的很有帮助。与指针和引用有点混淆。