我有一个用C语言编写的程序。在这个程序中,我有一个整数变量QS。在执行程序期间,此变量的值会更改 在用C编写的这个程序中,我想使用echo命令shell
显示这个变量QS我听说尿布C的system()功能让手使用终端或控制台
system(“echo $ QS”)当我这样做时,变量QS无法被识别,它什么也没有显示。
您对我如何做到这一点有什么具体的答案吗?以及如何用C语言识别变量?
我知道使用简单的printf,我可以显示这个变量,但我想要的是使用echo。
提前感谢您的回答。
答案 0 :(得分:2)
Shell无法访问您的程序变量值。您必须先将值设置到环境中。有不同的方法来做到这一点。其中之一是(在linux / unix中工作)
int main()
{
char chProgramVar[] = "hello world" ;
setenv("ShellVar", chProgramVar, 1) ;
system("echo $ShellVar") ;
}
答案 1 :(得分:2)
正如其他人所说,shell无法访问您的程序变量。您可以使用sprintf
将值插入到将使用system
执行的命令中:
char command[BUFSIZ];
sprintf(command, "echo %d", QS);
system(command);
答案 2 :(得分:1)
您使用system(3)
调用产生的shell不知道C程序中的任何变量。执行所需操作的最简单方法是将数据导出为环境变量。由于通过调用system(3)
继承了环境,因此您只需使用setenv(3)
设置变量即可。但是,您必须先将其格式化为字符串:
int QS = ...;
char QSStr[32]; // Longest integer string is INT_MIN = -2147483648, assuming
// that sizeof(int) == 4
snprintf(QSStr, sizeof(QSStr), "%d", QS); // Convert to string
setenv("QS", QSStr); // Set the environment variable)
...
system("echo $QS"); // Will print the value of QS
答案 3 :(得分:-1)
您必须将数字格式化为字符字节。数字“4”具有不同的整数表示形式作为打印字符。
使用printf打印数字,或使用sprintf将其作为字符重新格式化为新缓冲区。然后,您可以使用系统回显打印新缓冲区(无论出于何种原因)。
char s[16]; // might be too small
sprintf(s, "%d", integer_var);
// s is the string