调整字符数组的大小
Resizing character array in c
一个MFC编码器想学习一些关于字符数组初始化和元素删除的基本知识。以以下示例与MFC进行比较(有CString,因此不需要内存分配或取消分配,但在c中需要相同。)(没有std::string接口)
示例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)我用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* list数组将无法正确填充,反之亦然。
请提供给我任何链接,代码块,建议,帮助我解决纯c中的所有问题
In 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中创建一个可变长度的字符向量,复制std::string
的行为。
我在回答这个问题时给出了完整的源代码。
基本上,你需要在一个结构体周围创建各种函数(String_add
, String_getLine
, String_delete
…),该结构体将保存指向char向量的指针,大小和容量。为了最小化内存分配的数量,您可以遵循std::string
策略,每次将容量增加一倍。
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 按字符值访问int数组
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- C++ 带结构的数组字符
- 数组字符包含量超出预期
- 读取文件并添加到数组字符
- 如何在Qt中更改或替换数组字符
- 为什么编译器不在参数中传递数组字符 *arr[] 的大小?
- 井字棋数组字符错误
- 分割数组字符