gpt4 book ai didi

c++ - 在c中调整字符数组的大小

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:03 26 4
gpt4 key购买 nike

一个MFC编码员想学习一些关于字符数组初始化和删除元素的基础知识。通过以下示例与MFC进行比较(有CString,因此不需要内存分配或取消分配,但在c中同样需要。)(没有 std::string 接口(interface))

示例 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");

问题:-

2)我用 20000 初始化 char* constructString,但是当我的字符串非常小,大小为 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) 同上,如果我的一行字符超过 1000,则不考虑超过 1000 个字符,反之亦然。

2) 如果我的文件大小超过 65534,则 char* 列表数组将无法正确填充,反之亦然。


请提供任何链接、代码块、帮助我用纯 C 解决所有问题的建议。

最佳答案

在 C 中

    #define DEFAULT_ARRAY_SIZE          20000
#define NEW_SIZE 20100

char* constructString = (char *)malloc(DEFAULT_ARRAY_SIZE * sizeof(char));
// Now you have the array allocated

// To reallocate it:
constructSring = (char *)realloc (construcString, NEW_SIZE)

// Now you can assign new values into the new array positions:
constructString[20000] = 'a'
constructString[20001] = 'b'
constructString[20002] = 'c'
...

希望对你有帮助

关于c++ - 在c中调整字符数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com