كيفية تحليل عدد صحيح في سطحي سلسلة (gchar *)?
سؤال
لدي سلسلة التي تحتوي على (أرقام) قيمة عددية و أريد الحصول على هذه القيمة كما int.أنا على علم بأن هناك طرق أخرى للقيام بذلك مثل atoi()
;ومع ذلك, أود حقا أن استخدام سطحي للقيام بذلك.هل هذا تحليل/وظيفة التحويل موجودة ؟
المحلول
سطحي يوفر الكثير من المكتبة القياسية C مع السلامة بالتحقق من المدخلات ، والتحسينات حيث العملية.
وظيفة كنت تبحث عن g_ascii_strtoll()
.
متحذلق الإضافة
atoi()
يعامل لغة بنفس الطريقة strtol
و g_ascii_strtoll()
.جدا قراءة متأنية manpages و سطحي وثائق تكشف عن هذا.هنا بعض المقتطفات تلك التي لا يمكن RTFM:
على atoi() وظيفة تحويل الجزء الأول من السلسلة وأشار إلى nptr إلى int.السلوك هو نفس strtol(nptr, (char **) NULL, 10);
إلا أن atoi() لا يكشف عن الأخطاء.
في أماكن أخرى من "ج" لغة, سلاسل أخرى قد تكون مقبولة.(على سبيل المثال ، فاصل الآلاف من الإعدادات المحلية الحالية قد تكون معتمدة.)
تحويل سلسلة إلى gint64 القيمة.هذه الوظيفة يتصرف مثل معيار strtoll() الدالة في لغة C.وهو يفعل ذلك من دون تغيير الواقع الحالي لغة ، لأن ذلك من شأنه أن لا يكون مؤشر الترابط-الآمن.
تغيير الإعدادات المحلية
إذا لم يكن هذا بلا لغة بما فيه الكفاية, يمكنك تعيين الإعدادات المحلية من خلال متغيرات البيئة ، و/أو صريحة تدعو إلى setlocale()
نصائح أخرى
والخصلة هي مكتبة للأغراض العامة التي توفر قاعدة مشتركة لتطوير التطبيقات. هذا لا يعني الخصلة reimplements كل مكتبة C القياسية، ولكن بدلا من ذلك الملخصات مهما كانت غير متوفرة (أو لا تتفق) في جميع الأنظمة الأساسية المعتمدة.
وهكذا، وباختصار، يجب عليك استخدام وظيفة atoi()
القياسية: الخصلة تطبق فقط gdouble
وgint64
المتغيرات