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

标签 c++ arrays winapi char

一个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/

相关文章:

winapi - 什么是 WIN32 API WM_REFLECT 消息?

c++ - 如何将 CString 转换或转换为 LPWSTR?

c++ - 返回值与函数返回类型不匹配

c++ - 共同差异数

c++ - 哪些开源 C++ 项目有很好的(鼓舞人心的)测试?

Java 二维数组的有效声明

python - 按列对 NumPy 中的数组进行排序

arrays - 将两个文件中的对象数组与特定键 1.4 下的 jq 结合起来

windows - GetUserName Win32 API 有什么问题?

c++ - 分辨率与滴答频率