أحاول أن أفهم ما هي الطريقة الصحيحة للاستخدام strnlen
بحيث يتم استخدامه بأمان حتى مع مراعاة حالات الحافة.
مثل وجود سلسلة غير منتهية بقيمة خالية كإدخال.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
void* data = malloc(5);
size_t len = strnlen((const char*)data, 10);
printf("len = %zu\n", len);
return 0;
}
إذا كنت أتوقع سلسلة من الحجم الأقصى 10
، ولكن السلسلة لا تحتوي على حرف فارغ ضمن تلك الأحرف العشرة strnlen
سيتم قراءة خارج حدود البايت (قد يشير مؤشر الإدخال إلى كومة البيانات المخصصة). هل هذا السلوك غير محدد؟ إذا كانت الإجابة بنعم ، فهل هناك طريقة للاستخدام بأمان strnlen
لحساب طول السلسلة التي تأخذ في الاعتبار هذا النوع من السيناريو ولا تؤدي إلى سلوك غير محدد؟