Мне нужен многомерный массив символов, который является динамическим только в одном измерении ...
Мне нужно хранить пару строк длиной 10 (или меньше) символов каждый, но с переменным числом «пар».Динамический многомерный массив
Моя идея была эта
char (*instrucao)[2][10];
Что дает мне указатель на 2x10 массив символов, но это не работает должным образом, когда я делаю что-то вроде этого:
char strInstrucoes[117], *conjunto = calloc(21, sizeof(char));
instrucao = calloc(1, sizeof(char[2][10]));
conjunto = strtok(strInstrucoes,"() ");
for(i = 0; conjunto != NULL; i++){
realloc(instrucao, i+1*sizeof(char[2][10]));
sscanf(conjunto,"%[^,],%s", instrucao[i][0], instrucao[i][1]);
printf("%s | %s\n", instrucao[i][0], instrucao[i][1]);
conjunto = strtok(NULL, "() ");
}
Having strInstrucoes
, как (abc,123) (def,456) (ghi,789)
, я не являюсь матрицей с 3 линиями по 2 пары:
abc | 123
def | 456
ghi | 789
, но вместо того, чтобы это то, что я получаю:
abc | 123
def | 45def | 45de
ghi | 789
Что правильный способ сделать это? Спасибо!
Абсолютно верно ... И, глядя через старые старые коды, я заметил, что я никогда не назначал указатель на realloc. Хорошо, что я не работаю с C профессионально, тогда! Большое спасибо – Gabe
Realloc разработан так, чтобы он мог возвращать тот же адрес, который вы ему дали, поэтому он не должен перераспределять, а просто увеличивать область, к которой он имеет доступ. Но иногда происходит и реальное перераспределение. Также обратите внимание, что вы, вероятно, должны ограничивать чтение символов. например sscanf (conjunto),% 9 [^,],% 9s ", ...); иначе злые парни могут вызвать переполнение буфера. –
@ litb Да, но в этом случае у меня есть абсолютный контроль над входными данными (я пишу все файлы), поэтому я не беспокоился об этом – Gabe