سؤال

لدي هذا السلوك الغريب للغاية القادمة:

في الكود أدناه: إذا قمت بتعليق الدعوة إلى MyLogger، فكل شيء يعمل بشكل جيد، فهل أحصل على مطمئن Stempnr و 4 رمزا مطبوعة. ولكن إذا كنت غير ملائم على المكالمة إلى MyLogger لتسجيل الدخول، فإن التكرار فقط يحدث مرة واحدة وفي فئة الاختبار الأخرى مع رمز مشابه عند وجود حلقات تحدث أكثر من 4 مرات مع إرسال معلومات زائدة عن الحاجة إلى MyLogger.

لذلك، قمت بفحص أداة تنقية لتحديد ما إذا كانت هناك بعض مشكلات الذاكرة في MyLogger. لا يمكن العثور على أي. يستخدم MyLogger VAARGS لاستخراج مكالمة ARGS و VFPRINTF للطباعة.

لست متأكدا من صياغة هذا الرمز كذلك. سيكون موضع تقدير أي توجيه!.

char sTempNr[41] = "1129Z13589.2.9.10";
char *sTempStr;
sTempStr = NULL;

sTempStr = strtok(sTempNr,".");
while (sTempStr)
{
     printf("in in TempStr[%s]\n",sTempStr);
      //MyLogger("write","","Temp String[%s]",sTempStr);

     sTempStr = strtok(NULL,".");
}
هل كانت مفيدة؟

المحلول

strtok() يحافظ على بعض البيانات الثابتة بداخل ذلك MyLogger المكالمات strtok(), ، إما بشكل مباشر أو غير مباشر.

يحل محل strtok() مع strtok_r() (نسخة Reentrant من strtok()) للحصول على هذه المشكلة.

نصائح أخرى

هل المسجل يدعو Strtok؟

هو mylogger باستخدام strtok كذلك؟ لاحظ أن Strtok ليس عديمي الجنسية.

يبدو أن MyLogger هو تفسير السلسلة في Stempstr. حاول طباعةها مرة أخرى بعد المكالمة إلى MyLogger. على سبيل المثال

 printf("in in TempStr[%s]\n",sTempStr);
 MyLogger("write","","Temp String[%s]",sTempStr);
 printf("in in TempStr[%s]\n",sTempStr);

ومعرفة ما إذا كان أي شيء قد تغير

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