C ++ كيفية استخدام وتمرير صفيف Char ثلاثي الأبعاد؟

StackOverflow https://stackoverflow.com/questions/2188559

سؤال

أحاول إنشاء مجموعة Char لتخزين قيمة إرجاع الوظيفة. في الوظيفة التالية ، يتم تخزين البيانات في ***** Valv **. كيفية إنشاء متغير خارجي للوصول إلى البيانات؟

int credis_lrange(REDIS rhnd, const char *key, 
                   int start, int end, char ***valv) 
{
  int rc;

  if ((rc = cr_sendfandreceive(rhnd, CR_MULTIBULK, "LRANGE %s %d %d\r\n", 
                                key, start, end)) == 0) 
  {
    *valv = rhnd->reply.multibulk.bulks;
    rc = rhnd->reply.multibulk.len;
  }

  return rc;
}

المحلول:

char **elements;

int size = credis_lrange(this->redis,"object_2",600,603,&elements);

for (int i=0; i<size;i++) {
    cout << "element: " << elements[i] << endl; 
}

الشكر للجميع!

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

المحلول

char ***element[size];

ليس بالضبط صفيف ثلاثي الأبعاد ، ولكن مجموعة من size عناصر المؤشرات إلى الرميات char.

استخدم أي واحد مما يلي:

char e[ D1 ][ D2 ][ D3 ]; /* D1, D2, D3 are integral constants */
char *e[ D2 ][ D3 ];
char e[][ D2 ][ D3 ];

أيضًا ، يمكنك تمريره عن طريق ببساطة speficying e كحجة لوظيفتك.

في مزيد من القراءة ، يبدو أن المعلمة ليست في الحقيقة صفيف ثلاثي الأبعاد ولكنها مؤشر لمجموعة من الأوتار على غرار C. ملاحظة ، قد يكون بناء الجملة هو نفسه ، والقصد مختلف.

في هذه الحالة ، ستحتاج إلى القيام بأمرين:

  • حدد عدد الأوتار التي تريد تخزينها في الصفيف
  • لكل سلسلة
    • تخصيص الذاكرة
    • نسخ بيانات السلسلة إلى char مجموعة مصفوفة

وأخيرًا ، سوف تمر بعنوان هذه المجموعة من الأوتار إلى credis_lrange وظيفة.

نصائح أخرى

لقد وجدت ضربة واحدة فقط على Google لهذا الغاز ، ولكن يبدو أن وظيفة Cr_SendFandReceive تخصصها RHND-> reply.multibulk.bulks عضو ، لذلك لا تضطر فعلاً إلى تمريرها (منذ أن تم تمرير RHND في المقام الأول ).

إذا كنت ترغب في نسخها ، فستعلن عن عناصرها كـ char ** وتمرير عنوانها (أو استخدام المراجع) ، ثم داخل الطريقة التي يمكنك استنساخها للعضو المنزلبات وأيضًا كل سلسلة في الصفيف (في حلقة) .

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