تخطَّ إلى المحتوى

atoi

تحويل نص إلى عدد صحيح (سريع لكن غير آمن) atoi

atoi تحوّل نصًا إلى int بسرعة، لكن لا طريقة للتمييز بين فشل التحويل ونص يمثّل صفرًا فعليًا.

atoi (من stdlib.h) تقرأ الأرقام من بداية النص وتتجاهل أي حروف بعدها دون أي تنبيه. لو لم يوجد أي رقم صالح بالبداية تُرجع 0 — نفس القيمة التي تُرجعها لو كان النص "0" فعليًا، فلا توجد طريقة موثوقة لمعرفة أي الحالتين حدثت. أيضًا سلوكها غير معرّف (undefined behavior) لو تجاوزت القيمة مدى int.

هذا يجعلها غير آمنة مع أي مدخل غير موثوق (من مستخدم أو ملف)، وbالأفضل استخدام strtol التي تكشف الأخطاء عبر endptr وerrno بدل atoi في أي كود يتعامل مع مدخلات خارجية.

الصياغة

int atoi(const char *str);

📄 مثال

#include <stdlib.h>

int a = atoi("123");   // 123
int b = atoi("  42abc"); // 42 (يتجاهل الفراغات البادئة والحروف اللاحقة)
int c = atoi("xyz");   // 0 — بدون أي إشارة لفشل التحويل

أهم النقاط

العنصرالوظيفة
atoiنص إلى int
atolنص إلى long
atofنص إلى double (من stdlib.h أيضًا)

💡 نصائح عملية

  • استخدمها فقط عندما تكون متأكدًا 100% أن النص رقم صالح دائمًا (مثل ثابت بالكود)
  • لأي مدخل من المستخدم أو ملف أو معامل سطر أوامر استخدم strtol بدلها

⚠️ أخطاء شائعة

  • الاعتماد على قيمة 0 كدليل نجاح أو فشل — قد تكون تحويلًا صحيحًا للنص "0"
  • تمرير نص يمثّل رقمًا خارج مدى int وتوقّع نتيجة يمكن التنبؤ بها

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار C الكامل بالعربي.