সি প্রধান পরামিতি


9

আমি একটি কোড লিখেছি যা প্রধান প্যারামিটারগুলি প্রদর্শন করতে পারে তবে আমি যখন এটি সংকলন করি এবং "*" প্রোগ্রামটি টাইপ করি তখন আমার ফাইলের কাঠামো দেখায়। সেমিডিতে কমান্ড এর মতো দেখাচ্ছে:program.exe 1 2 3 *

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const* argv[]) {
    for (int i=0; i<argc; i++) printf("%s\n", argv[i]);
    return 0;
}

ফলাফল হলো:

program
1
2
3
program.c
program.exe
10-03-20
11-02-20

এবং আমার প্রশ্ন: প্রোগ্রামগুলি ফাইল তালিকাবদ্ধ করার পরিবর্তে "*" মুদ্রণ করতে বাধ্য করা কি সম্ভব? পরামর্শে ধন্যবাদ


5
*শেল, না প্রোগ্রাম নিজেই ব্যাখ্যা পায়। প্রোগ্রামটি * ব্যবহার করতে \*বা "*"পাস করার জন্য।
mch

5
সমস্যাটি হ'ল আপনার শেল দ্বারা *রূপান্তরিত "file1 file2 ..."আপনার সি প্রোগ্রামের সাথে কোনও ভুল নেই (যদিও এটি সহ <stdlib.h>প্রয়োজনীয় নয়)। তারার ব্যবহারের উদ্ধৃতিগুলিতে রূপান্তরিত করতে শেলটি রোধ করতে :program.exe 1 2 3 "*"
পিএমজি

সহায়তার জন্য ধন্যবাদ
stasio14

প্রশ্নের সাথে সম্পর্কিত নয়, তবে কঠোরভাবে বলতে গেলে, char const* argv[]এটি সঠিক নয়। আপনি নিজের দ্বারা প্রধান () এর ফর্মগুলি আবিষ্কার করতে পারেন না, কেবল সংকলক এটি করতে পারে। argvমেমরিটি আসলে পড়ার / লেখার জন্য, যদিও এটি লেখা প্রায়শই সেরা ধারণা নয়।
লন্ডিন

1
উইন্ডোজ সেন্টিমিডি শেল ওয়াইল্ডকার্ড সম্প্রসারণ সম্পাদন করে না। হয় এটি
সেন্টিমিডি

উত্তর:


5

mingw প্রোগ্রামটির প্যারামিটারগুলির ওয়াইল্ডকার্ড বিস্তৃতি ঘটায়। এই আচরণটি অক্ষম করতে আপনার প্রোগ্রামটিতে নিম্নলিখিতগুলি যুক্ত করুন:

int _CRT_glob = 0;

ইউনিক্স বিশ্বে শেলটি ওয়াইল্ডকার্ড সম্প্রসারণ করবে বলে আশা করা হচ্ছে।

$ perl -le'print for @ARGV' *
a
b

উইন্ডোজ বিশ্বে ওয়াইল্ডকার্ড সম্প্রসারণ অ্যাপ্লিকেশনটিতে রেখে দেওয়া হয়েছে।

>perl -le"print for @ARGV" *
*

এটি পোর্টেবল প্রোগ্রামগুলি লেখা জটিল করে তোলে। যেহেতু প্রায়শই উইন্ডোজ মাথায় রেখে লেখা হয়নি এমন প্রোগ্রামগুলি সংকলনের জন্য মিংডাব্লু ব্যবহৃত হয়, তাই এর সি রানটাইম লাইব্রেরি প্যারামিটারগুলি স্বয়ংক্রিয়ভাবে ওয়াইল্ডকার্ড সম্প্রসারণ করে।

a.c:

#include <stdio.h>

int main(int argc, char const* argv[]) {
    for (int i=0; i<argc; i++)
        printf("%s\n", argv[i]);

    return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
a.c
a.exe

তবে, মিংগ একটি আউট প্রদান করে। আপনার প্রোগ্রামে নিম্নলিখিতগুলি যুক্ত করা এই আচরণটি অক্ষম করে:

int _CRT_glob = 0; 

a.c:

#include <stdio.h>

int _CRT_glob = 0; 

int main(int argc, char const* argv[]) {
    for (int i=0; i<argc; i++)
        printf("%s\n", argv[i]);

    return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
*
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.