Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ - Fatal编程技术网

C++ 由于长度不正确,字符串未在循环中打印

C++ 由于长度不正确,字符串未在循环中打印,c++,C++,我对字符串长度有问题。我完全不明白为什么我的str3的长度是0。为什么它的长度为0?我用0初始化它,但稍后在for循环中,我给str3的每个索引一个值3。我假设每个下划线都会给str3另一个索引,这意味着长度会增加一个,对吗?发生什么事了 该程序所做的是在两个字符串比较(str1和str2)中查找某些索引值,并为str3提供与0对应的索引值(来自tempvar的输出) for(intz=0;z

我对字符串长度有问题。我完全不明白为什么我的str3的长度是0。为什么它的长度为0?我用0初始化它,但稍后在for循环中,我给str3的每个索引一个值3。我假设每个下划线都会给str3另一个索引,这意味着长度会增加一个,对吗?发生什么事了

该程序所做的是在两个字符串比较(str1和str2)中查找某些索引值,并为str3提供与0对应的索引值(来自tempvar的输出)

for(intz=0;zstd::coutstr3是一个空字符串,运行时:

str3[z] = '_';
std::cout << str3[z];
如果您不清楚std::string行为,可以尝试使用at成员函数来访问单个字符,而不是使用[]运算符,因为如果索引无效,它将引发异常:

std::string any;
any.at(5) = 'a'; //will throw std::out_of_range

您的
str3
为空,因为您在创建它时没有指定长度,即它的大小为0。使用
[]
访问/修改索引超过大小的元素是未定义的(例如)


您应该使用填充构造函数(the)初始化
str3
,或者在访问和修改元素之前在其上使用
resize

对于这个问题来说,这是太多的代码了(请参阅),但我猜您忽略了空终止。这是什么
std::string*arr_temp=new std::string[10]
。这样做毫无意义。删除是不匹配的,不应该是有条件的,这是什么:
std::cout,当然它的大小是0,你永远不会在字符串中分配空间,但你会访问其中不存在的内存。这在很多级别上都不好…@MatthieuBrucher我删除了字符串数组。我只使用常规的字符串。条件delete语句中的行用于测试我的指针是否被删除。我如何分配字符串内部的空间?而不使其成为字符数组?我使用下划线初始化字符串时为其创建索引。如果分配数组,则必须取消分配数组。你的
delete
应该是
delete[]
和在
cout
(或任何其他地方)中取消引用
NULL
指针是一个非常糟糕的主意。可能需要添加一些关于如何在下标操作符上使用
.at()
的内容,这样就可以捕捉到这一点,并且不会让问题变得模棱两可。
str3[z] = '_';
std::cout << str3[z];
str3.resize(str1.length());
std::string any;
any.at(5) = 'a'; //will throw std::out_of_range