接着上面的提问,为什么由于每个字符串数组都没有以 '\0' 结尾
时间: 2024-03-10 12:51:16 浏览: 61
在 C/C++ 中,字符串的结尾必须以 `'\0'` 字符作为标志,表示字符串的结束。这个字符在字符串的最后一个字节处,因此被称为字符串的“空字符”或“结束符”。
在这段代码中,每个字符串数组并没有以 `'\0'` 结尾,因此不能使用 `*(p+j)!="\0"` 的方式来判断循环的终止条件。实际上,这种循环方式可能会导致访问到内存中未定义的区域,从而出现未知错误。
如果想要在循环中遍历每个字符串数组中的所有元素,可以将每个字符串数组的长度保存在另外一个数组中,并在循环中使用该长度来作为判断循环终止的条件。例如,可以使用 `strlen` 函数来获取每个字符串的长度,然后在循环中判断当前元素是否到达字符串的结尾,例如:
```
char* arr[][3]={{"北京","沈阳","哈尔滨"},{"北京","张家口"},{"北京","石家庄","武汉"}};
int len[3]={3,2,3};
for(int i=0; i<3; i++){
char** p = arr[i];
for(int j=0; j<len[i]; j++){
if(*(*(p+j)) != '\0'){
cout << *(p+j) << endl;
}
}
}
```
这样就可以安全地循环遍历每个字符串数组中的所有元素了。
阅读全文