2010-11-26 88 views

回答

4

您应该使用一个容器类:CStringArray

void FillThisArray(CStringArray & rMyStrings) 

如果你不想这(我看不出任何可能的原因,但无论如何):

void FillThisArray(CString* strings, size_t num) 
{ 
    // example 
    for(size_t s=0; s<num; s++) 
    { 
    strings[s].Format(_T("This is the %d. string"), s+1); 
    } 
} 
+3

或更好的仍然使用`std :: vector ` – Naveen 2010-11-26 08:55:59

+0

@Naveen:我会再次说,如果OP使用std :: string – 2010-11-26 09:02:13

-1
void FillThisArray(CString* pstrArray) 

不能ü做到这一点?

+0

不,OP应该如何知道有效物品的数量? – 2010-11-26 09:02:54

1

您需要将指针传递给第一个元素,并可用元素的数量:

void FillThisArray(CString* strings, size_t num) 
{ 
} 
0

您必须通过一个镝作为指向其第一个元素的指针进行分配。有两种语法为,都是等价的:

void FillThisArray(CString* strArray) 
{ 
} 

void FillThisArray(CString strArray[]) 
{ 
} 

可以使用strArray参数的函数内部的数组。请注意,指针并不包含有关数组实际大小的信息,所以如果大小不是全局可用的,则应将大小作为第二个参数传递。 hth

4

CString * pstrArray = NULL; pstrArray =新的CString [nMySize];

为了简单:

CString* pstrArray = new CString[nMySize]; 

现在,我怎么把它传递给一个函数来填补呢?什么是实际参数?
空隙FillThisArray(????){}

最明显的界面是:

void FillThisArray(CString* pstrArray, size_t n) 

退一步:

  • 注意,对于所有nMySize存储器默认构建的CString s将由该单个新语句分配
  • 您应该考虑使用std::vector<std::string>
    • std::vector因为:
      • 当它超出范围自动删除所有琴弦的存储器
      • 默认存储器使用将更逐渐作为字符串使用例如加入增加push_back(),在这样的使用可以增长超过初始大小没有任何特殊的工作,你的一部分
      • 您可以nMySize串主动预留空间,和/或创建它们,当你构建vector如果你真的想要这种行为
    • std::string因为:
      • 由C++标准中定义的便携式字符串类型,并在对你的依赖减少锁
      • 这么说,这可能是不现实的或低效的,以避免在某些词rcumstances
3

如果有一个很好的理由,为什么你不能用一个标准的容器类,考虑采取一个迭代式的方法。这将节省您不必担心数组有多大是你的函数:

void FillThisArray(CString* begin, CString* end) 
{ 
    for (CString* iter = begin; iter != end; ++iter) 
    { 
     *iter = "Some text"; 
    } 
} 

int main() 
{ 
    CString* pstrArray = new CString[nMySize]; 
    FillThisArray(&pstrArray[0], &pstrArray[nMySize]); 

    for (int i = 0; i < nMySize; ++i) 
    { 
     assert(pstrArray[i] == "Some_text"); 
    } 

    delete[] pstrArray; 
} 

你甚至可以模板的功能,所以它不依赖于(有问题的)实现pstrArray的:

template <typename T> 
void FillThisArray(T begin, T end) 
{ 
    for (T iter = begin; iter != end; ++iter) 
    { 
     *iter = "Some text"; 
    } 
} 

int main() 
{ 
    { 
     CString* pstrArray = new CString[nMySize]; 
     FillThisArray(&pstrArray[0], &pstrArray[nMySize]); 

     for (int i = 0; i < nMySize; ++i) 
     { 
      assert(pstrArray[i] == "Some text"); 
     } 

     delete[] pstrArray; 
    } 
    { 
     std::vector<std::string> better(nMySize); 
     FillThisArray(better.begin(), better.end()); 
     for (int i = 0; i < nMySize; ++i) 
     { 
      assert(better[i] == "Some text"); 
     } 
    } 
}