Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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
C++ 动态字符串数组-C_C++_C - Fatal编程技术网

C++ 动态字符串数组-C

C++ 动态字符串数组-C,c++,c,C++,C,我有一个字符串数组,定义如下: char** arrNames; char** AddName(char** arrNames, int nNameCount) { char** arrTemp; arrTemp = new char[nNameCount]; ... // And later I change the pointer of arrNames to arrTemp } 现在我想动态地为它分配一个大小。 我有一个函数,它接收新的大小和上面的数组

我有一个字符串数组,定义如下:

char** arrNames;
char** AddName(char** arrNames, int nNameCount)
{
    char** arrTemp;

    arrTemp = new char[nNameCount];
    ...
    // And later I change the pointer of arrNames to arrTemp
}
现在我想动态地为它分配一个大小。 我有一个函数,它接收新的大小和上面的数组。 事情是这样的:

char** arrNames;
char** AddName(char** arrNames, int nNameCount)
{
    char** arrTemp;

    arrTemp = new char[nNameCount];
    ...
    // And later I change the pointer of arrNames to arrTemp
}
这显然不起作用。那么我应该怎么做呢


提前感谢。

如果您想要nNameCount字符串,您需要分配一个字符数组(即字符串数组):

char**AddName(char**arrNames,int nNameCount)
{
字符**arrTemp=新字符*[nNameCount];
对于(int i=0;i

在此之后,您可以使用arrTemp[index]访问每个字符串。请注意,您仍然需要初始化每个字符串。

如果您想要nNameCount字符串,则需要分配一个字符数组(即字符串数组):

char**AddName(char**arrNames,int nNameCount)
{
字符**arrTemp=新字符*[nNameCount];
对于(int i=0;i

在此之后,您可以使用arrTemp[index]访问每个字符串。请注意,您仍然需要初始化每个字符串。

下面是一个如何初始化动态字符串的动态数组的工作示例

twoDStr = new char*[10];
twoDStr[0] = new char[10];

cin>>twoDStr[0];
cout<<twoDStr[0]<<endl;
twoDStr=新字符*[10];
twoDStr[0]=新字符[10];
cin>>twoDStr[0];

cout下面是一个如何初始化动态字符串的动态数组的工作示例

twoDStr = new char*[10];
twoDStr[0] = new char[10];

cin>>twoDStr[0];
cout<<twoDStr[0]<<endl;
twoDStr=新字符*[10];
twoDStr[0]=新字符[10];
cin>>twoDStr[0];

在C语言中,动态分配内存的函数有
malloc()
calloc()
realloc()
free()


在C语言中,动态分配内存的函数有
malloc()
calloc()
realloc()
free()

应该给你更多的信息

//后来我将arrNames的指针改为arrTemp

要使其正常工作,需要将arrNames作为指向数组的指针

char** AddName(char*** arrNames, int nNameCount) {
    //...
    *arrNames = arrTemp;
}
别忘了释放以前分配的内存,因为它们可能会引用

//后来我将arrNames的指针改为arrTemp

要使其正常工作,需要将arrNames作为指向数组的指针

char** AddName(char*** arrNames, int nNameCount) {
    //...
    *arrNames = arrTemp;
}

别忘了释放以前分配的内存,因为它们可能会引用新< /代码>,即使你碰巧(非常不明智的IMO)使用C++编译器编译你的C代码。如果你想学习C++,那么在现实生活中不要使用<代码>新< /代码>,使用向量。为了理解C++中内存分配的工作原理,可以使用<代码>新< /COD>,但是如果你应该学习C语言中使用的MalOC/FLUE,那么你就不会使用C++新[]/Dele[]来这样做了。你使用C还是C++?新字符。。。将只与C++工作。用C代替Malc。我使用C++编译器(这就是他们教我们的),所以如果你想学习C,就应该工作,不要使用<代码>新< /代码>,即使你碰巧(非常不明智的IMO)使用C++编译器编译你的C代码。如果你想学习C++,那么在现实生活中不要使用<代码>新< /代码>,使用向量。为了理解C++中内存分配的工作原理,可以使用<代码>新< /COD>,但是如果你应该学习C语言中使用的MalOC/FLUE,那么你就不会使用C++新[]/Dele[]来这样做了。Gah,
valloc
是一个遗留的Posix组件,而不是标准C。Gah,
valloc
是一个遗留的Posix组件,而不是标准C。