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