سؤال

أنا بحاجة إلى الأبعاد مجموعة من المحارف الذي هو دينامية في البعد واحد فقط...
يجب أن متجر زوج من السلاسل بطول 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 عندما مرت أول مؤشر فارغة.

نصائح أخرى

يمكنك أن تفعل أفضل بكثير للعثور على مكتبة مع الحاوية التي سوف تلبي الاحتياجات الخاصة بك.على أسوأ الفروض باستخدام أيا من أفضل المكتبات, هل يمكن أن يكون اثنين صفائف منفصلة ، كل منهم يحمل نصف زوج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top