Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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++的情况下迭代char **_C++ - Fatal编程技术网

在没有任何指定边界C++的情况下迭代char **

在没有任何指定边界C++的情况下迭代char **,c++,C++,我目前正在努力寻找一种在不知道边界的情况下迭代char**的方法 现在我有这个 for (int i = 0; a[i] != nullptr;i++){ //do something } 这个问题是,如果我有一个字符**看起来像{hey\0,this\0,nullptr} 但我希望它能为这样一个{hey\0,this\0}工作,其中没有nullptr来指示输入的结束。我不确定这是否真的可行,所以如果不可行,请告诉我 另外,我不想使用std::string,我知道它的功能以及它如何更简单,但不

我目前正在努力寻找一种在不知道边界的情况下迭代char**的方法

现在我有这个

for (int i = 0; a[i] != nullptr;i++){
//do something
}
这个问题是,如果我有一个字符**看起来像{hey\0,this\0,nullptr}

但我希望它能为这样一个{hey\0,this\0}工作,其中没有nullptr来指示输入的结束。我不确定这是否真的可行,所以如果不可行,请告诉我

另外,我不想使用std::string,我知道它的功能以及它如何更简单,但不使用它是有原因的


我该怎么做呢?

如果您不知道数组的大小,那么就不知道它的结束位置。这就是为什么要添加哨兵值(如final nullptr)来标记未知大小数组的结束


有点像C字符串中的常规空终止符。这是由str语法隐式添加的;str与{'s','t','r','\0'}相同。这就是str\0没有意义的原因,因为它给出了{'s'、't'、'r'、'\0'、'\0},其中最后的'\0'浪费了空间。

如果没有一个特殊的值来指示数组的结尾,则无法确定它的大小。你知道std::vector吗?还有什么理由不使用std::string?是的,我知道向量和字符串,只需要使用char**,uni项目的一部分。但是在相同的情况下,如果说字符**有类似于{hey,hello\0}的内容。这是否意味着由于没有字符串终止符,无法对第一个值进行迭代?能否更改数据结构?如果是的话,不要设计伤害你心灵的东西。或至少为它提供一个绑定。char**来自哪里?提供您的上下文会有所帮助。如果您知道有多少个字符串,则可以在没有终止空指针的情况下遍历字符串数组。这些信息可用吗?@Neil是那些愚蠢的限制之一,但好吧^^没有办法做到这一点。您无法在数组末尾追加一个null ptr,也无法传递数组的长度。或者编写一个包含指针+长度的结构。您可以通过使用std::array或将大小作为参数传递来解决此问题。在防御性编程方面,如果char数组不是以null结尾,您将如何终止比较?有没有办法做到这一点?@Neil通常不会。除非你能定义一个最大尺寸。但是您需要保证访问的内存是有效的。考虑char a[]={“a”};如果读取超过第一个字符,则调用越界访问,除非知道字符的大小,否则无法防止这种情况。