Кодировщик MFC хочет узнать некоторые основные сведения о символьном массиве и инициализировать элемент element.Take следующие примеры сравниваются с MFC (есть CString, поэтому нет необходимости в распределении памяти или распределении, но то же самое необходимо в c.) (не станд :: строковый интерфейс)Изменение размера массива символов в 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) Код будет работать нормально до моего полукокса * размер constructString меньше, чем 20000, но когда он превышает я не у вас есть решение, как изменить размер массива, чтобы он принимал больше charecters.
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);
}
Размер файла Whitever File будет работать нормально.
Для 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, тогда массив символов * * не будет заполняться должным образом и наоборот.
Просьба предоставить мне любую ссылку, блок кода, рекомендации, которые помогают мне решить все проблемы в чистом C.
'new char [1000]' не 'C'. Возможно, вам захочется взглянуть на 'realloc', не уверен, что для него эквивалентно' C++'. – Rohan
Я уже прошел через это, но есть ли у вас какой-нибудь пример? – user1035089
Как указано, 'new' является' cpp'. Если вам нужно использовать 'new', посмотрите [this] (http://stackoverflow.com/questions/4737226/regrow-memory-allocated-by-operator-new) обсуждение для ur 1-го qn. –