سؤال

لدي هذا الهيكل الذي أحاول تهيئته باستخدام الكود التالي.يحصل على خطأ وقت التشغيل عند محاولة تهيئة "بصمة_الإصبع"

ما العيب بها؟

typedef struct fpinfo
{
    unsigned long chunk_offset;
    unsigned long chunk_length;
    unsigned char fing_print[33];

}fpinfo;

الوظيفة:

struct fpinfo* InitHTable(struct fpinfo ht[][B_ENTRIES])
{
    unsigned char garb[33]={0};

        for (int j = 0; j < BUCKETS; ++j) 
        {
            for (int k = 0; k < B_ENTRIES; ++k)
            {
                ht[j][k].chunk_offset=0;
                ht[j][k].chunk_length=0;
                strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);
                //ht[j][k].fing_print[32]=0;
            }
        }
        curr_tanker=1;
        return &ht[0][0];
}

إنه نفس الشيء مع strncpy()

هل كانت مفيدة؟

المحلول

strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);

أنت تعالج الحرف الأخير من fing_print كمؤشر ومحاولة الكتابة إليه.ربما كنت تقصد:

strcpy((char*)ht[j][k].fing_print,(const char*)garb);

نصائح أخرى

استخدم strncpy إذا كنت ترغب في تحديد عدد الأحرف التي يجب أن تكوننسخ.استبدال هذه الخطوط: giveacodicetagpre.

مع هذه: giveacodicetagpre.

البيان strcpy((char*)ht[j][k].fing_print[32],(const char*)garb); لا معنى له.يستغرق العنصر 32 من fing_print المصفوفة، تفسر ذلك كعنوان، وتحاول كتابة محتوياته garb إلى هذا العنوان (والذي ينبغي ألا يكون له أي آثار جانبية على الإطلاق، لأنه garb تحتوي على أصفار فقط، وتعتبر سلسلة بطول 0 strcpy()).

إذا كنت تريد تعيين ht[j][k].fing_print لجميع الأصفار، استخدم memset(ht[j][k].fing_print, 0, sizeof(ht[j][k].fing_print)).

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