3

我有CString SearchString[]在 C++中接收的方法

我想获取该数组的大小以在 for 循环中进行迭代,如果没有,那么有人可以建议如何将此数组转换为CStringArray.

#include <string>
using namespace std;

void myFunction(HWND shwnd, CString SearchString[], BOOl Visible)
{
    //how do i get the size of "SearchString" here;
   // I do not know how much it is populated, there might be one, two or three strings
}

int main()
{
    CString Header[12];
    BOOL bVisible;
    myFunction(shwnd,Header,bVisible);
    return 0;
}
4

4 回答 4

4

您可以使用函数模板来获取任何固定大小数组的大小的句柄:

template<size_t N >
void foo( CString (&SearchString)[N] )
{
  // the length of the array is N
}

因此,您可以将函数设为模板:

template<size_t N >
void myFunction(HWND shwnd, CString (&SearchString)[N], BOOl Visible)
{
   // the length of SearchString is N in here
}

然后像这样调用它:

int main()
{
    CString Header[12];
    BOOL bVisible; // you might need to initialize this
    myFunction(shwnd, Header, bVisible);
}
于 2013-07-23T05:46:25.250 回答
1

如果您可以提供一些代码,将有助于理解并给出您的答案。从你的问题我猜你有一个字符串数组,你想知道它的大小。您可以在可以使用字符串数据类型的地方使用 STL 向量,并且可以轻松找到向量的大小。我正在提供一个可以帮助您的示例代码。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

void myfunction(vector<string>& searchstring)
{
    int a=searchstring.size();
    cout<<a;
}
int main()
{
    vector<string>searchstring;
    searchstring.push_back("hi");
    searchstring.push_back("hello");
    searchstring.push_back("man");
    searchstring.push_back("man");
    myfunction(searchstring);
    searchstring.clear();
    return 0;
}

这里向量的大小是 4。

于 2013-07-23T06:17:05.487 回答
1

为什么不能更改函数的签名?

那么你可以使用CStringArray还是vector<CString>哪个瞬间变得更容易使用呢?

void myFunction(HWND hwnd, CStringArray stringArray, BOOL Visible)
{
  for(int nIndex = 0; nIndex < stringArray.GetSize(); nIndex++)
  {
    CString tempString(stringArray.GetAt(nIndex));
    // do something with string
  }
}
于 2013-07-23T07:53:11.583 回答
0

请参阅链接以使用名为 GetLength的函数获取 Cstring 对象的长度。

于 2013-07-23T06:17:58.037 回答