当我使用目录n gpg错误发生时:gpg:没有这样的目录或文件,但它有 我有:
char directory[100]="/tmp/hello.txt"
有一个代码
int s = system("echo password | gpg -c --passphrase-fd 0 directory");
如果我写信而不是目录'/tmp/hello.txt',它将起作用 也许是''
的问题答案 0 :(得分:1)
C不会自动用其值替换标识符的出现。但是,预处理器可以做到这一点。你可以定义一个宏
#define directory "/tmp/hello.txt"
然后再做
int s = system("echo password | gpg -c --passphrase-fd 0 " directory);
这个concatenates字符串处于“预处理时间”,甚至在编译时之前。另一种方法是使用strncat
在运行时连接两个字符串:
char str[128] = "echo password | gpg -c --passphrase-fd 0 ";
strncat(str, directory, sizeof(str) - strlen(str));
为了能够重新存储你可以存储strlen(str)
的字符串,每次都要写一个空字节,然后调用strncat
:
void append(const char* app) {
static const size_t len = strlen(str);
str[len] = '\0';
strncat(str, app, sizeof(str) - len);
}
答案 1 :(得分:1)
这是一个重复的问题:pass parameter using system command
显示了如何将局部变量内容传递给系统命令
以下是建议的代码,注意:username
和password
是局部变量:
char cmdbuf[256];
snprintf(cmdbuf, sizeof(cmdbuf),
"net use x: \\\\server1\\shares /user:%s %s",
username, password);
int err = system(cmdbuf);
if (err)
{
fprintf(stderr, "failed to %s\n", cmdbuf);
exit(EXIT_FAILURE);
}