file-type

C语言中int main(int argc, char *argv[])函数解析

TXT文件

下载需积分: 50 | 3KB | 更新于2024-09-21 | 4 浏览量 | 35 下载量 举报 收藏
download 立即下载
在C语言编程中,`int main(int argc, char *argv[])` 是程序执行的入口点,它在每一个C程序中都是必不可少的。这个函数定义了一个接受两个参数的函数:`argc` 和 `argv`。`argc`(argument count)是一个整型变量,表示命令行参数的个数,包括程序本身的名称。`argv`(argument vector)是一个字符指针数组,其中每个元素指向一个字符串,这些字符串代表了程序启动时传入的参数。 `argc` 的值通常等于 `argv` 数组中元素的个数减一,因为 `argv[0]` 总是包含程序的名称。例如,如果我们在命令行中运行程序 `my_copy` 并传递两个参数 `a:\ccw1.txt` 和 `b:\ccw2.txt`,那么: ``` argc = 3 argv[0] = "my_copy" argv[1] = "a:\ccw1.txt" argv[2] = "a:\ccw2.txt" ``` 在示例9-8中,程序通过 `atoi()` 函数将 `argv[1]` 和 `argv[2]` 中的字符串转换为整数 `x` 和 `y`,然后计算它们的和。`atoi()` 是 `ascii to integer` 的缩写,用于将字符串转换为对应的整数值。 而在示例9-9中,程序利用 `fopen()` 函数打开了由 `argv[1]` 指定的读取文件(如 `a:\ccw1.txt`),以及由 `argv[2]` 指定的写入文件(如 `a:\ccw2.txt`)。`"rb"` 表示以二进制读取模式打开文件,`"wb"` 表示以二进制写入模式打开文件。程序通过 `feof()` 函数检查是否到达文件末尾,然后使用 `fgetc()` 读取文件的一个字符并用 `fputc()` 将其写入目标文件。最后,使用 `fclose()` 关闭这两个文件。 通过 `int main(int argc, char *argv[])` 函数,我们可以获取并处理命令行参数,这在需要用户输入文件路径、配置或其他运行时信息的程序中非常有用。它可以实现灵活的程序调用方式,增强程序的功能和交互性。

相关推荐

filetype

#include <string> #include <cstring> #include <vector> #include <map> #include <functional> // WARNING: NO more headers allowed! using std::pair; using std::string; using std::vector; using std::map; using std::function; namespace final { class arguments { private: // WARNING: You cannot add more member variables. int _argc; char** _argv; public: arguments() : _argc(0), _argv(nullptr) {} explicit arguments(const string& cmd) { if (cmd=="") { _argc=0; _argv=nullptr; } else { _argc=1; char* cmd_data=(char *)cmd.c_str();//need to delete int begin; for (int i=0;i<strlen(cmd_data);i++) if (cmd_data[i]!=' '){ begin=i; break; } for(int i=begin;i<strlen(cmd_data)-1;i++) if (cmd_data[i]==' ' && cmd_data[i+1]!=' ') _argc++; _argv=new char*[_argc]; for (int i=0;i<_argc;i++) _argv[i]=new char[30]; int cnt_argc=0; int begin_argv=begin; for (int i=begin;i<strlen(cmd_data);i++) { if (cmd_data[i]!=' '&& cmd_data[i-1]==' ') begin_argv=i; if (cmd_data[i]!=' '&& cmd_data[i+1]==' ') memcpy(_argv[cnt_argc++], &cmd_data[begin_argv], sizeof(char) * (i - begin_argv + 1 ) ); } memcpy(_argv[cnt_argc++], &cmd_data[begin_argv], sizeof(char) * (strlen(cmd_data) -begin_argv +1) ); } } ~arguments() { for (int i=0;i<_argc;i++) delete[] _argv[i]; delete[] _argv; } // WARNING: You cannot modify the following functions int argc() const { return _argc; } char** argv() const { return _argv; } }; // You don't need to modify shell. class shell { private: map<int, arguments> running_list; public: shell() = default; void run(int pid, const string& cmd, const function<void(int, char**)>& invoked) { running_list.emplace(pid, cmd); invoked(running_list[pid].argc(), running_list[pid].argv()); } int subprocessExit(int pid, int return_value) { running_list.erase(pid); return return_value; } vector<int> getRunningList() const { vector<int> rt; for (auto& pair:running_list)rt.push_back(pair.first); return rt; } }; } 这段代码有什么问题

tianqingtai
  • 粉丝: 0
上传资源 快速赚钱