Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用char*[C+;+;]增加数组 我正在处理C++中的动态数组。以下代码的帮助_C++_Arrays_Pointers_Dynamic_Char - Fatal编程技术网

使用char*[C+;+;]增加数组 我正在处理C++中的动态数组。以下代码的帮助

使用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 *=

我试着一个接一个地读这些字符,然后生成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 *= 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
,根据感谢,这确实很有帮助。对指针和参考资料有点困惑。谢谢,这真的很有帮助。与指针和引用有点混淆。