সিটিতে 0 থেকে অ্যারে কীভাবে শুরু করবেন?


170

গ্লোবাল হিসাবে আমার সিতে একটি বড় নাল অ্যারে দরকার। টাইপ করার পাশাপাশি এটি করার কোনও উপায় আছে কি?

char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };

?


26
চর জেরোআরে [1024] = {0};

3
যদি আপনাকে কখনও গাদা হয়ে মেমরি বরাদ্দ করতে হয় তবে আপনি কলোক () ব্যবহার করতে পারেন। উদাহরণস্বরূপ চর * শূন্যেরে = কলোক (1024, সিজোফ (* জিরোরে)); ।
আন্দ্রেই সিওবানু

2
এনবি কলোক charইত্যাদির জন্য ঠিক আছে , তবে আপনি যদি অ্যারে-অফ-পয়েন্টার চান তবে আপনার সেগুলি স্পষ্ট করে NULL এ সেট করা উচিত, সেখানে (অযৌক্তিকভাবে!) কোনও গ্যারান্টি নেই যে NULL শূন্য-বাইট হিসাবে উপস্থাপিত হবে। যদিও এটি আক্ষরিক 0স্পষ্টভাবে নাল পয়েন্টারকে উপস্থাপন করে।
অ্যাড্রিয়ান রত্নপালা

উত্তর:


284

গ্লোবাল ভেরিয়েবল এবং স্ট্যাটিক ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে শূন্যে আরম্ভ হয়। আপনি যদি সহজভাবে

char ZEROARRAY[1024];

গ্লোবাল স্কোপ এ এটি রানটাইমের সময় সমস্ত শূন্য হবে। কিন্তু আসলে সেখানে হয় একটি সাঁটে লেখার সিনট্যাক্স যদি আপনি একটি স্থানীয় অ্যারের ছিল। যদি একটি অ্যারে আংশিকভাবে আরম্ভ হয়, তবে যে উপাদানগুলি আরম্ভ করা হয় না তারা উপযুক্ত ধরণের মান 0 পায়। আপনি লিখতে পারেন:

char ZEROARRAY[1024] = {0};

সংকলকটি শূন্যের সাথে অলিখিত প্রবেশগুলি পূরণ করবে। বিকল্পভাবে আপনি memsetপ্রোগ্রাম শুরুতে অ্যারে শুরু করতে ব্যবহার করতে পারেন :

memset(ZEROARRAY, 0, 1024);

আপনি যদি এটি পরিবর্তন করে এবং সমস্ত জিরোতে পুনরায় সেট করতে চান তবে এটি কার্যকর হবে।


2
{0}; জরিমানা কাজ করে, C99 [7 6.7.8 / 21] যদি একটি ব্রেস-সংযুক্ত তালিকায় কম সংখ্যক উপাদান বা সমষ্টিগত সদস্যের চেয়ে কম সংখ্যক সূচনা হয়, বা একটি স্ট্রিং আক্ষরিকের চেয়ে কম অক্ষর পরিচিত আকারের অ্যারের আরম্ভ করার জন্য ব্যবহৃত হয় অ্যারেতে থাকা উপাদানগুলি, সামগ্রিক
অংশের অবশিষ্টগুলি

দয়া করে উল্লেখ করুন: প্রারম্ভিক 0 টি একটি নয় character। এটি একটি integer
ইয়ংগু নোহ

1
{}আলোচনা: stackoverflow.com/questions/17589533/... memset স্পষ্টত সঠিক নয়: আমি এটি শুধুমাত্র 0 জন্য কাজ করে চিন্তা করুন: stackoverflow.com/questions/11138188/...
সিরো Santilli郝海东冠状病六四事件法轮功

1
যদি এটি স্ট্রকের একটি অ্যারে হয় এবং জিসিসি ব্যবহার করে তবে -Werror=missing-bracesএটিতে আরম্ভ করা আবশ্যক {{0}}। প্রথম স্ট্রাক্ট উপাদানটি যদি অন্য স্ট্রাক্ট হয় {{{0}}}এবং ততক্ষণ । স্ট্যাকওভারফ্লো.com
টোর ক্লিংবার্গ

1
আজ আমি অদ্ভুত মুখোমুখি ... int arr[256]={1,2,7,{0}};... যা আমাকে এখানে এনেছে। এমনকি আমি জানতাম না যে এই আংশিক-শূন্যকরণটি এটি না হওয়া পর্যন্ত একটি জিনিস।
নীল গ্যাটেনবি

32

আপনি যদি 0 টি ব্যতীত অন্য মানগুলিতে অ্যারে শুরু করতে চান তবে আপনি এটি gccকরতে পারেন:

int array[1024] = { [ 0 ... 1023 ] = -1 };

এটি সি 99 ডিজাইনেটেড ইনিশিয়েলাইজারের একটি জিএনইউ এক্সটেনশন । পুরানো জিসিসিতে -std=gnu99আপনার কোডটি সংকলন করতে আপনার প্রয়োজন হতে পারে ।


14
মনোনীত ইনিশিয়ালাইজারগুলি সি 99 এ স্ট্যান্ডার্ড। ...একটি ব্যাপ্তি চিহ্নিত করার ব্যবহার একটি সিসি-নির্দিষ্ট এক্সটেনশন।
কিথ থমসন

1
এটি কোনও সি 99 মনোনীত আরম্ভকারী নয়, এটি একটি জিসিসি-নির্দিষ্ট পরিসীমা আরম্ভকারী । সি 99 স্ট্যান্ডারের পরিবর্তে কেন জিসিসি ম্যানুয়ালটির পরামর্শ নিন?
ক্রেগ বার্নস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.