سؤال

لدي وظيفة تُرجع مجموعة من الأطوال المختلفة بناءً على البحث عن الجدول. أنا malloc'ing مطلوبة الذاكرة لها داخل الوظيفة ولكن بعد ذلك كيف يمكنني ملء المصفوفة من مؤشرها؟ المترجم يرمي نفس الخطأ لكل من محاولاتي (الخطوط المعلقة). الرجاء المساعدة!

int lookup(const char *name, float *factors) {
    int length;
    if(!strcmp(name, "foo")) {
        length = 6;
        factors = malloc(length * sizeof(float));
        // *factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
        // factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
    }
    else if(!strcmp(name, "bar"))
    {
        length = 4;
        factors = malloc(length * sizeof(float));
        // *factors = {0, -3, -6, -9};
    }
    // .......................
    // more else if branches
    // .......................
    else    // error: name not found in table
    {
        factors = NULL;
        fprintf(stderr, "name not found in table!!\n");
        return 0;
    }
    return length;
}
هل كانت مفيدة؟

المحلول

static const float[] initials = { .... };
factors = malloc(sizeof(initials));
memmove(factors,initials,sizeof(initials));

نصائح أخرى

استخدام تدوين الصفيف - العوامل [الفهرس].

لقد مر بعض الوقت منذ أن قمت بترميز C بشكل مستقيم ، لذا سامح أخطاء طفيفة ، لكن حاول

const float[] initialValue = {0, -0.9, -4.9, -8, -7.8, -23.9};
for (int i=0; i<length; i++)
{
    factors[i] = initialValue[i];
}

المشكلة الأساسية هي أنك تحاول استخدام بناء الجملة لتهيئة الثوابت لتهيئة متغير ديناميكي.

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