【问题标题】:Pass File As Command Line Argument将文件作为命令行参数传递
【发布时间】:2014-11-12 04:33:57
【问题描述】:

我的程序应该从命令行读取加密文件,但我不知道如何传递命令行参数。这些是说明:

*移位密码是一种非常基本的密码算法,其中通过将明文中的每个字符替换为字母表中后面固定数量的字符(即移位值)的字符来执行加密。例如,如果我们的 shift 值为 2,那么明文 cabbage 就变成了 ecddcig。

很容易看出移位密码非常弱,因为只有 26 种可能的移位方式(其中 26 种方式中的一种与根本不移位相同)。您的程序应该在命令行读取已使用移位密码加密的文件的名称。它将使用所有可能的移位值解密文件,然后确定哪个移位值是正确的。程序确定正确的移位值是在应用时导致文件单词出现在字典中的最高百分比的值。 *

我编写了将字符串中的字符移动 n 的函数、确定给定单词是否出现在字典中的函数以及将字符串拆分为标记的函数。

【问题讨论】:

  • 您知道main 函数的参数吗? argcargv 参数我确定你以前见过吗?这些包含在命令行上传递的参数。我建议你尝试一下,打印出argc 的值,以及从零循环到argc 并打印出argv 数组中的相应条目。
  • 所以如果我想传递一个文件,我会在编译 .c 文件时在命令行中包含文件名吗?
  • 不,您将文件名作为参数传递给创建的可执行文件。喜欢./my_program /some/path/to/my/file。然后,此文件名将作为字符串 ("/some/path/to/my/file") 在 argv[1] 中。不过记得先检查argc 至少是2
  • 那么如果我想在程序中操作文件,我会使用 argv[1] 来引用它?

标签: c command-line command-line-arguments


【解决方案1】:

在 C 语言中,您可以在主函数中使用 argcargv 访问命令行参数。像这样的:

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

请注意,我从 argv 列表中的第二项开始,因为第一项始终是可执行文件本身的名称。 当使用./program file.txt file2.txt 调用时,它会打印

file.txt
file2.txt

希望有帮助!

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2015-09-12
    • 2017-12-17
    • 1970-01-01
    • 2013-07-15
    • 2016-08-11
    • 2015-04-11
    • 2016-02-07
    • 2016-10-10
    相关资源
    最近更新 更多