sizeof(stArr) 为您提供整个数组的总字节大小。它不会为您提供您正在寻找的元素计数。因此,您的循环超出了数组的范围,这就是您在输出中得到垃圾的原因。
要得到数组的元素个数,需要用数组的字节大小除以数组中单个元素的大小,例如:
#include <iostream>
#include <string>
int main() {
std::string stArr[] = {" 1 | ","_"," | ","_"," | ","_"," | "};
int count = sizeof(stArr) / sizeof(stArr[0]);
for(int i = 0; i < count; ++i) {
std::cout << stArr[i];
}
return 0;
}
话虽如此,如果您使用的是 C++17 或更高版本的编译器,则可以使用 std::size() 获取静态数组的元素计数:
#include <iostream>
#include <string>
#include <iterator>
int main() {
std::string stArr[] = {" 1 | ","_"," | ","_"," | ","_"," | "};
size_t count = std::size(stArr);
for(int i = 0; i < count; ++i) {
std::cout << stArr[i];
}
return 0;
}
或者,如果您使用的是 C++11 编译器,则可以改用 std::extent:
#include <iostream>
#include <string>
#include <type_traits>
int main() {
std::string stArr[] = {" 1 | ","_"," | ","_"," | ","_"," | "};
size_t count = std::extent<decltype(stArr)>::value;
for(int i = 0; i < count; ++i) {
std::cout << stArr[i];
}
return 0;
}
也就是说,如果您使用的是 C++11 或更高版本的编译器,请考虑改用 std::array:
#include <iostream>
#include <string>
#include <array>
int main() {
std::array<std::string, 7> stArr = {" 1 | ", "_", " | ", "_", " | ", "_", " | "};
// or: in C++17 and later:
// std::array stArr{" 1 | ", "_", " | ", "_", " | ", "_", " | "};
std::size_t count = stArr.size();
for(size_t i = 0; i < count; ++i) {
std::cout << stArr[i];
}
return 0;
}
或者,您也可以使用ranged-based for loop:
#include <iostream>
#include <string>
int main() {
std::string stArr[] = {" 1 | ", "_", " | ", "_", " | ", "_", " | "};
// or std::array...
for(auto &s : stArr) {
std::cout << stArr[i];
}
return 0;
}
否则,如果您不使用 C++11 或更高版本的编译器,请考虑使用 std::vector:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> stArr;
stArr.push_back(" 1 | ");
stArr.push_back("_");
stArr.push_back(" | ");
stArr.push_back("_");
stArr.push_back(" | ");
stArr.push_back("_");
stArr.push_back(" | ");
std::size_t count = stArr.size();
for(size_t i = 0; i < count; ++i) {
std::cout << stArr[i];
}
return 0;
}