C++获取字符串数组的大小
C++ getting the size of an array of strings
我需要使用一个大小未知的字符串数组。这里我有一个例子,看看是否一切正常。我需要知道该数组在 ClassC 中的大小,但不将该值作为参数传递。我已经看到很多方法(在这里和 google 中)但是正如您现在将要看到的那样,它们没有用。它们 return 数组第一个位置的字符数。
void ClassB::SetValue()
{
std::string *str;
str = new std::string[2]; // I set 2 to do this example, lately it will be a value from another place
str[0] ="hello" ;
str[1] = "how are you";
var->setStr(str);
}
现在,如果我在 ClassC 中调试,strdesc[0] ="hello" and strdesc[1] = "how are you"
,所以我想 class C 可以正常获取信息....
void classC::setStr(const std::string strdesc[])
{
int a = strdesc->size(); // Returns 5
int c = sizeof(strdesc)/sizeof(strdesc[0]); // Returns 1 because each sizeof returns 5
int b=strdesc[0].size(); // returns 5
std::wstring *descriptions = new std::wstring[?];
}
所以.. 在 classC 中,我怎么知道 strdesc 的数组大小,应该是 return 2?我也试过:
int i = 0;
while(!strdesc[i].empty()) ++i;
但在 i=2
之后程序因分段错误而崩溃。
谢谢,
编辑可能的解决方案:
结论:一旦我将其指针传递给另一个函数,就无法知道数组的大小
- 将大小传递给该函数...或...
- 使用向量 std::vector class。
使用这种代码,您将遇到内存泄漏和其他类型的 C 风格问题。
使用矢量:
#include <vector>
#include <string>
#include <iostream>
...
std::vector<std::string> my_strings;
my_strings.push_back("Hello");
my_strings.push_back("World");
std::cout << "I got "<< my_strings.size() << " strings." << std::endl;
for (auto& c : my_strings)
std::cout << c << std::endl;
how can I know strdesc's array size
您无法通过指向数组的指针知道数组的大小。
您可以做的是将大小作为另一个参数传递。或者更好的是,改用向量。
but after i=2 the program crashes with a segmentation fault.
超出数组边界的访问具有未定义的行为。
我需要使用一个大小未知的字符串数组。这里我有一个例子,看看是否一切正常。我需要知道该数组在 ClassC 中的大小,但不将该值作为参数传递。我已经看到很多方法(在这里和 google 中)但是正如您现在将要看到的那样,它们没有用。它们 return 数组第一个位置的字符数。
void ClassB::SetValue()
{
std::string *str;
str = new std::string[2]; // I set 2 to do this example, lately it will be a value from another place
str[0] ="hello" ;
str[1] = "how are you";
var->setStr(str);
}
现在,如果我在 ClassC 中调试,strdesc[0] ="hello" and strdesc[1] = "how are you"
,所以我想 class C 可以正常获取信息....
void classC::setStr(const std::string strdesc[])
{
int a = strdesc->size(); // Returns 5
int c = sizeof(strdesc)/sizeof(strdesc[0]); // Returns 1 because each sizeof returns 5
int b=strdesc[0].size(); // returns 5
std::wstring *descriptions = new std::wstring[?];
}
所以.. 在 classC 中,我怎么知道 strdesc 的数组大小,应该是 return 2?我也试过:
int i = 0;
while(!strdesc[i].empty()) ++i;
但在 i=2
之后程序因分段错误而崩溃。
谢谢,
编辑可能的解决方案:
结论:一旦我将其指针传递给另一个函数,就无法知道数组的大小
- 将大小传递给该函数...或...
- 使用向量 std::vector class。
使用这种代码,您将遇到内存泄漏和其他类型的 C 风格问题。
使用矢量:
#include <vector>
#include <string>
#include <iostream>
...
std::vector<std::string> my_strings;
my_strings.push_back("Hello");
my_strings.push_back("World");
std::cout << "I got "<< my_strings.size() << " strings." << std::endl;
for (auto& c : my_strings)
std::cout << c << std::endl;
how can I know strdesc's array size
您无法通过指向数组的指针知道数组的大小。
您可以做的是将大小作为另一个参数传递。或者更好的是,改用向量。
but after i=2 the program crashes with a segmentation fault.
超出数组边界的访问具有未定义的行为。