【问题标题】:Linux terminal, how to pass to an argument to another argument C executableLinux终端,如何将一个参数传递给另一个参数C可执行文件
【发布时间】:2016-04-24 04:01:47
【问题描述】:

我用 C 语言编写了两个小程序,cryptdecrypt。 我可以从终端拨打电话:

./crypt some_argument                         it works.

但我想通过解密crypt 的输出。 我已经试过了:

./decrypt $(./crypt hello)                    does not work
./crypt hello | ./decrypt                     does not work

源代码: 地穴:

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

#define CRYPT_KEY 5

char *crypto(char *str) {
    char *tmp_adr = str;

    while (*str != 0) {
        *str += CRYPT_KEY;
        str++;
    }
    return tmp_adr;
}

int main(int argc, char *argv[]) {
    printf("Crypted message: %s\n", crypto(argv[1]));
}

Decypt 是一样的,但这里有一个减号:

*str -= CRYPT_KEY;

有人知道怎么做吗?

【问题讨论】:

  • 什么是some_argument?一个文本字符串?你怎么称呼./decryptcrypt 输出二进制数据吗?
  • 发布你的 crypt 程序的输出。您是否解密程序读取数据以从参数或标准输入解密?
  • 一个可能的问题是,crypt 的输出不仅仅是加密的字符串,而是有额外的文本 "Crypted message:" ,解密可以处理吗?请删除它并尝试一下。
  • 是的,你是对的@Eric thx。发现了问题,真是傻事。使用 crypt 我输出了一条完整的消息“Crypted message: %s\n”,所以很明显,如果我给它解密将找不到相同的东西。命令./decrypt $(./crypt2 culo) 可以在正确的程序下正常工作。

标签: c bash terminal arguments


【解决方案1】:

输出包含空格。如果您想要 argv[1] 中的所有内容,则需要引用它。

./decrypt "$(./crypt some_argument)"

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 2013-08-05
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多