MFC編碼器想要學習一些關於字符數組初始化和刪除元素的基本知識。以下示例與MFC比較(有CString,因此不需要內存分配或分配,但需要在c中)。 ) (沒有的std :: string接口)調整字符數組的大小c
例1: -
構建串擺在我們下面的MFC代碼。
CString constructString;
constructString = "";
constructString = "ABC";
constructString = constructString + "PQR";
constructString = constructString + "LMN";
無論字符串的大小,我們都有這個工作。
對於C,我用下面的代碼
#define DEFAULT_ARRAY_SIZE 20000
char* constructString = new char[DEFAULT_ARRAY_SIZE];
strcpy(constructString ,"");
strcat(constructString ,"ABC");
strcat(constructString ,"PQR");
strcat(constructString ,"LMN");
問題: -
1)代碼將正常工作,直到我的char * constructString大小小於20000,但是當它超過我不有解決方案,如何調整我的數組,這將需要更多的人物。
2)我初始化char * constructString與20000,但是當我的字符串是非常小的大小10,然後我剩餘的18990人物浪費或不知道,這會影響我的可執行性能。如果是,那麼如何刪除我的其餘的虛擬人物。
例2: -
要閱讀我們用下面的MFC代碼文件的內容。
CStdioFile ReadFile;
ReadFile.Open("Sample.txt",CFile::typeText|CFile::Read);
CString CurrentString;
CStringArray WholeFile;
while(ReadFile.ReadString(CurrentString))
{
WholeFile.Add(CurrentString);
}
文件大小它會正常工作。
對於C我用下面的代碼
#define MAX_FILE_SIZE 65534
FILE *ptr_file;
const char* list[MAX_FILE_SIZE];
wchar_t CurrentString[1000];
ptr_file =fopen("Sample.txt","rb");
int __index = 0;
while(fgetws (CurrentString , 1000 , ptr_file) != NULL)
{
char* errorDes;
errorDes = new char[1000];
wcstombs(errorDes, CurrentString, 1000);
list[__index] = errorDes;
__index++;
}
問題: -
1)同上,如果我的一行charecters超過1000然後超過1000個charecters不考慮和臺鉗反之亦然。
2)如果我的文件大小超過65534,那麼char * list數組將不會正確填充,反之亦然。
請給我提供任何鏈接的代碼塊,建議,幫助我解決所有問題,在純C.
'new char [1000]'不是'C'。你可能想看看'realloc'不知道什麼是'C++'等價物。 – Rohan 2013-05-07 12:05:40
我已經通過了,但你有任何例子嗎? – user1035089 2013-05-07 12:10:35
正如所指出的,'new'是'cpp'。如果您需要使用'new',請查看[this](http://stackoverflow.com/questions/4737226/regrow-memory-allocated-by-operator-new)針對您的第一個qn的討論。 – 2013-05-07 12:17:15