ديناميكية متعددة الأبعاد مجموعة
-
06-07-2019 - |
سؤال
أنا بحاجة إلى الأبعاد مجموعة من المحارف الذي هو دينامية في البعد واحد فقط...
يجب أن متجر زوج من السلاسل بطول 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, "() ");
}
بعد strInstrucoes
كما (abc,123) (def,456) (ghi,789)
, لا مصفوفة مع 3 خطوط 2 أزواج من كل مثل هذا:
abc | 123
def | 456
ghi | 789
ولكن بدلا من ذلك هذا هو ما أقوله:
abc | 123
def | 45def | 45de
ghi | 789
ما هي الطريقة الصحيحة للقيام بذلك ؟ وذلك بفضل!
المحلول
ويجب تعيين مؤشر العائد عنوان realloc
جديدة
instrucao = realloc(instrucao, (i+1)*sizeof(char[2][10]));
لاحظ أن لفحص الخطأ، قد ترغب في تعيين إلى مؤشر جديد والتحقق من NULL
. لاحظ أيضا أقواس - كنت في الأساس فقط واضاف i
بدلا من ضرب مع الحجم المطلوب. يشرف بسهولة.
لاحظ أن ليست هناك حاجة لcalloc
الأولي. مجرد تهيئة instrucao
إلى NULL
، وسوف realloc تتصرف مثل malloc
عندما مرت أول مؤشر فارغة.
نصائح أخرى
يمكنك أن تفعل أفضل بكثير للعثور على مكتبة مع الحاوية التي سوف تلبي الاحتياجات الخاصة بك.على أسوأ الفروض باستخدام أيا من أفضل المكتبات, هل يمكن أن يكون اثنين صفائف منفصلة ، كل منهم يحمل نصف زوج.