2010-11-26 85 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"); 
     } 
    } 
}