Я новичок в C, и я хочу создать динамический массив для хранения строк. Я написал код ниже, но это не сработало. Элементы массива содержат некоторые символы ASCII вместо строки. Я хочу historyArray[0]
значение будет "foo"
. Как я могу это сделать?Динамическая структура массива строк в C
typedef struct {
char *historyCommand;
int usedSize;
int maximumSize;
} HistoryArray;
void CreateHistoryArray(HistoryArray *HistoryArray) {
HistoryArray->historyCommand = (char *) malloc(sizeof(char) * MAX_LEN);
HistoryArray->usedSize = 0;
HistoryArray->maximumSize = INITIAL_SIZE;
}
void ExpandHistoryArray(HistoryArray *HistoryArray, int newSize) {
int *newArray = (char *) malloc(sizeof(char) * newSize);
memcpy(newArray, HistoryArray->historyCommand, sizeof(char) * HistoryArray->maximumSize);
free(HistoryArray->historyCommand);
HistoryArray->historyCommand = newArray;
HistoryArray->maximumSize = newSize;
}
void AddHistoryValue(HistoryArray *HistoryArray, char historyCommand[]) {
strcpy(HistoryArray->historyCommand[HistoryArray->usedSize], historyCommand);
HistoryArray->usedSize++;
if (HistoryArray->usedSize == HistoryArray->maximumSize) {
ExpandHistoryArray(HistoryArray, HistoryArray->maximumSize * 2);
}
}
void freeHistoryArray(HistoryArray *a) {
free(a->historyCommand);
a->historyCommand = NULL;
a->usedSize = 0;
a->maximumSize = 2;
}
HistoryArray historyArray;
Пожалуйста, укажите [mcve]. Как и какие функции вы вызываете? «Я хочу, чтобы значение historyArray [0] было« foo ». Это не имеет смысла.' HistoryArray [0] 'не является массивом' char'. Пожалуйста, уточните в своем описании. И, пожалуйста, отформатируйте свой код с правильным отступом чтобы сделать его доступным для чтения. – kaylum
'char * HistoryArray' не является массивом строк, это массив символов, который представляет собой только одну строку. – Barmar
' BTW', 'malloc + memcpy + free' - это то же самое, что' realloc' – Barmar