Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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++_Visual Studio 2010 - Fatal编程技术网

C++ 如何获取字符**数组中的元素计数

C++ 如何获取字符**数组中的元素计数,c++,visual-studio-2010,C++,Visual Studio 2010,正如问题所说,有没有办法读取char**数组中有多少个元素 在下面的代码print函数中,应在不读取sizeofArray变量的情况下查找charpp数组中的元素计数 #include <iostream> using namespace std; char** charpp; void print(char** charpp){ cout << "Size: " << sizeof(&charpp) << "\r\n";

正如问题所说,有没有办法读取char**数组中有多少个元素

在下面的代码
print
函数中,应在不读取
sizeofArray
变量的情况下查找
charpp
数组中的元素计数

#include <iostream>
using  namespace std;

char** charpp;

void print(char** charpp){
    cout << "Size: " << sizeof(&charpp) << "\r\n";
    for(int i=0;i< sizeofArray;i++){
        if (charpp[i]!=NULL)
            cout << i << " : " << charpp[i] << "\r\n";
    }
}

void main() {
    int sizeofArray = 27;

    charpp = new char*[sizeofArray];
    for(int i = 0; i < sizeofArray; i++) {
      charpp[i] = NULL;
    }

    charpp[1] = "test1";
    charpp[5] = "test5";

    print(charpp);

    charpp? delete(charpp):0;
    cin.get();
}
#包括
使用名称空间std;
char**charpp;
作废打印(字符**charpp){

CUT

一个C++数组不包含关于它的大小的信息——必须存储在一个单独的变量中。

#include <iostream>
using  namespace std;

char** charpp;

void print(char** charpp){
    cout << "Size: " << sizeof(&charpp) << "\r\n";
    for(int i=0;i< sizeofArray;i++){
        if (charpp[i]!=NULL)
            cout << i << " : " << charpp[i] << "\r\n";
    }
}

void main() {
    int sizeofArray = 27;

    charpp = new char*[sizeofArray];
    for(int i = 0; i < sizeofArray; i++) {
      charpp[i] = NULL;
    }

    charpp[1] = "test1";
    charpp[5] = "test5";

    print(charpp);

    charpp? delete(charpp):0;
    cin.get();
}
这就是原因
main(int-argc,char*argv[])
接受两个参数:大小和数组本身


< C++中最简单的解决方法是使用<代码>向量 >字符串的大小也很容易在C++中使用,只是C++中的一个字符串数组拼写为<代码> STD::vector < /代码>。@ KerrekSB,是的,不幸的是,在我的代码中,他们选择使用char *。我不在寻找字符串的大小,我在寻找字符串的大小。元素中的数组您不能;
charpp
根本不是数组,它是指向
char*
的指针。您必须传递大小。在删除之前,您也不需要检查null。
delete
不是一个函数-
delete[]charpp;
是您应该编写的。(您可能还需要其中一个。)好的,你现在不是在处理字符串,你是在处理一个char变量和指针。如果你想得到一个数组的长度,它就是charpp[]只是使用你的for循环来迭代数组并获得长度是很简单的。你可以从数组的指针推断数组大小的唯一方法是如果NULL按惯例终止数组。那么你可以将元素的数量计数到最后。不幸的是,在数组的中间有空值,所以Y您可能会得到错误的结果。如果您使用
char const*
,您可以使用空字符串常量而不是null。感谢您的解决方案。此代码是12年前由其他人编写的,很可能具有c背景。虽然您的解决方案需要在代码中进行大量更改,但我认为这是值得的,至少是那些愿意这样做的人在我之后维护代码不会像我一样痛苦。没问题,但是为什么不让新函数将数组的大小作为参数,就像在main()中一样示例?以前的程序员为数组大小分配了一个全局变量,函数是从不同的线程调用的,该线程仅从该全局变量知道数组的大小。12年前它可能有意义,但在当前的设计模式下它看起来很可怕。我决定使用字符串和向量,只需要更改6个方法。我希望在我之后的人们能欣赏它。再次谢谢你