1

我有一个用 C 语言编写的程序。在这个程序中,我有一个整数变量 QS。这个变量的值在程序执行过程中发生变化在这个用C编写的程序中,我想使用echo命令shell显示这个变量QS

听说纸尿裤C的system()函数可以使用终端或控制台

system ("echo $ QS") 当我这样做时,变量 QS 无法识别并且它什么也不显示。

您对我如何做到这一点有任何具体的答案吗?以及如何识别C语言中的变量?

我知道使用简单的 printf,我可以显示这个变量,但我想要的是使用 echo。

预先感谢您的回答。

4

4 回答 4

3

Shell 无法访问您的程序变量值。您必须先将值设置到环境中。有不同的方法可以做到这一点。其中之一是(在 linux/unix 中工作)

int main()  
{  
    char chProgramVar[] = "hello world" ;  
    setenv("ShellVar", chProgramVar, 1) ;  
    system("echo $ShellVar") ;  
}  
于 2012-09-17T05:03:25.783 回答
2

正如其他人所说,shell 无法访问您的程序变量。您可以使用sprintf将值插入到您将使用以下命令执行的命令中system

char command[BUFSIZ];

sprintf(command, "echo %d", QS);
system(command);
于 2012-09-17T05:14:52.753 回答
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
于 2012-09-17T05:04:34.297 回答
-1

您必须将数字格式化为字符字节。数字“4”作为打印字符具有不同的整数表示。

使用 printf 打印数字,或使用 sprintf 将其作为字符重新格式化到新缓冲区中。然后您可以使用系统回显(无论出于何种原因)打印新缓冲区。

char s[16]; // might be too small
sprintf(s, "%d", integer_var); 
// s is the string  
于 2012-09-17T04:56:17.947 回答