اطلاعیه

Collapse
No announcement yet.

تشخیص طول آرایه در C

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تشخیص طول آرایه در C

    سلام.
    چطوری میشه طول یه آرایه رو در c یه دست آورد؟
    مثلا
    unsigned char text[]="Welcome"; i

    #2
    پاسخ : تشخیص طول آرایه در C

    با تابع strlen از هدر string.h میتونی طول رشته رو بدست بیاری.

    روش2 : (اگه احیانا به strlen دسترسی نداشتی!!)
    می تونی خودت یه حلقه بنویسی و یکی یکی کاراکتر های رو بخونی تا به کاراکتر تهی /0 برسی. این نشون دهنده پایان رشته.
    https://www.linkedin.com/in/mohammadhosseini69

    http://zakhar.blog.ir

    دیدگاه


      #3
      پاسخ : تشخیص طول آرایه در C

      سلام
      دستور sizeof()طول آرایه رو برمیگردونه
      یا علی

      دیدگاه


        #4
        پاسخ : تشخیص طول آرایه در C

        دستور sizeof همونطور که از اسمش پیداست حجم مورد رو برمیگردونه ولی تعداد رو نه. در اینجا چون حجم یک عنصر از آرایه 1 بایت هستش حجم با طول یکی شده وگرنه اگر داشته باشیم:


        int a[100]


        sizeof(a) روی سیستمهای 16 بیتی 200 و روی سیستمهای 32 بیتی 400 برمیگردونه. ایضا اگر برای آرایه های با طول ثابت بخوایین بایستی از ماکروی زیر استفاده کنین:


        #define dim(x) (sizeof(x)/sizeof((x)[0]))


        که همیشه در هر سیستمی dim(a) در مثال فوق مقدار 100 رو برمیگردونه.

        دیدگاه


          #5
          پاسخ : تشخیص طول آرایه در C

          متاسفانه زبان C اگه آرایه از نوع رشته ای نباشه نمیتونه طول رو بده(شما هم نمیتونی بفهمی) در مورد رشته ها هم طول آرایه بدست نمیاد بلکه طول رشته بدست میاد که ممکنه از طول آرایه کمتر باشه. این مشکل c بود که محدوده ها رو نمیتونست کنترل بکنه و به همین دلیل بود که کلاس های آرایه بوجود اومد و باز هم به همین دلیله که موقع کار کردن با آرایه ها علاوه بر اسم آرایه(بعنوان آدرس شروع آرایه) طول اون هم به توابع ارسال میشد

          دیدگاه


            #6
            پاسخ : تشخیص طول آرایه در C

            متاسفانه اشتباهی که شما کردین و بقیه هم میکنن اینه که این مشکل از C نیست. مشکل از تعبیر غلطیه که شما انتظار دارین کامپایلر C از کدی که شما مینویسین انجام بده. مثلا یکی از نمونه تعابیر غلط دیگه این بود که یکی میگفت آیا کامپایلر C باگ داره؟ و توضیح داده بود که اگه در یک switch آیتم default به صورت Default نوشته بشه کامپایلر هیچ ایرادی نمیگیره. دقیقا این مسئله هم هست. چون بر خلاف تصور عموم مردم switch در C یک ساختار ثابت نیست. بلکه تکه کدی هست که میتونه چندین و چند entry point داشته باشه. مسلما در هر بلوک کدی هم میشه label تعریف کرد که این Default هم یکی از اون label ها هست.

            یک آرایه در C به نوعی یک اشاره گر ضمنی به محدوده داده های اون آرایه هست. یعنی شما با نوشتن یک آرایه فقط مقداری حافظه رزرو میکنین. شما میتونین حجم یک آرایه رو ببینین. مسلما با sizeof ولی اینکه داخل این آرایه چه خبره به کامپایلر ربطی نداره. ضمنا مادامی که کامپایلر به اطلاعات ساختاری خود آرایه دسترسی داشته باشه میتونه حجمش رو بده اما وقتی در شرایطی قرارش بدین که این اطلاعات رو نتونه بازیابی کنه (چه جوری؟ آدرس آرایه رو استفاده کنین) خوب صد البته نمیتونه حجم آرایه رو برگردونه. چرا چون شما اینجا با اون آرایه به عنوان یک آرایه کار نمیکنین بلکه با آدرس یک حافظه به طول نامشخص کار میکنین.

            دیدگاه

            لطفا صبر کنید...
            X