MFC 编码员想要学习一些关于字符数组初始化和删除元素的基本知识。将以下示例与 MFC 进行比较(有 CString,因此不需要内存分配或取消分配,但在 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* 构造字符串大小小于 20000,但是当它超过我没有解决方案时,如何调整我的数组大小以便它需要更多的字符。
2)我用 20000 初始化 char* 构造字符串,但是当我的字符串非常小的大小为 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);
}
文件的 Whitever 大小可以正常工作。
对于 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) 同上,如果我的一行字符超过 1000,则不考虑超过 1000 个字符,反之亦然。
2)如果我的文件大小超过 65534,那么 char* 列表数组将无法正确填充,反之亦然。
请向我提供任何链接、代码块、建议,以帮助我解决纯 C 语言中的所有问题。