我有以下问题:
我在我的程序中使用了这个函数:
system("echo -n 60 > /file.txt");
它工作正常。
但我不想拥有恒定的价值。我这样做了:
curr_val=60;
char curr_val_str[4];
sprintf(curr_val_str,"%d",curr_val);
system("echo -n curr_val_str > /file.txt");
我检查了我的字符串:
printf("\n%s\n",curr_val_str);
是的,这是对的。
但在这种情况下system
不起作用,并且不返回-1。我只是打印字符串!
如何传输像整数这样的变量,这些变量将以整数形式打印,但不是字符串?
所以我想要变量int a并且我想在文件中打印带有系统函数的值。我的file.txt的真实路径是/ proc / acpi / video / NVID / LCD / brightness。我不能用fprintf写。我不知道为什么。
答案 0 :(得分:9)
你不能像你想要的那样连接字符串。试试这个:
curr_val=60;
char command[256];
snprintf(command, 256, "echo -n %d > /file.txt", curr_val);
system(command);
答案 1 :(得分:8)
system
函数接受一个字符串。在你的情况下,它使用文本* curr_val_str *而不是该变量的内容。而不是使用sprintf
来生成数字,而是使用它生成您需要的整个系统命令,即
sprintf(command, "echo -n %d > /file.txt", curr_val);
首先确保命令足够大。
答案 2 :(得分:7)
在您的情况下实际(错误地)执行的命令是:
"echo -n curr_val_str > /file.txt"
相反,你应该这样做:
char full_command[256];
sprintf(full_command,"echo -n %d > /file.txt",curr_val);
system(full_command);
答案 3 :(得分:4)
#define MAX_CALL_SIZE 256
char system_call[MAX_CALL_SIZE];
snprintf( system_call, MAX_CALL_SIZE, "echo -n %d > /file.txt", curr_val );
system( system_call );
答案 4 :(得分:2)
正确的方法与此类似:
curr_val=60;
char curr_val_str[256];
sprintf(curr_val_str,"echo -n %d> /file.txt",curr_val);
system(curr_val_str);
答案 5 :(得分:2)
请不要。 :)
为什么要求system()
进行如此简单的操作?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int write_n(int n, char * fname) {
char n_str[16];
sprintf(n_str, "%d", n);
int fd;
fd = open(fname, O_RDWR | O_CREAT);
if (-1 == fd)
return -1; //perror(), etc etc
write(fd, n_str, strlen(n_str)); // pls check return value and do err checking
close(fd);
}
答案 6 :(得分:2)
您是否考虑过使用C ++的iostreams工具而不是炮轰echo
?例如(未编译):
std::ostream str("/file.txt");
str << curr_val << std::flush;
或者,传递给system
的命令必须完全格式化。像这样:
curr_val=60;
std::ostringstream curr_val_str;
curr_val_str << "echo -n " << curr_val << " /file.txt";
system(curr_val_str.str().c_str());
答案 7 :(得分:1)
使用snprintf
来避免安全问题。
答案 8 :(得分:0)
如何使用std::string
&amp; std::to_string
...
std::string cmd("echo -n " + std::to_string(curr_val) + " > /file.txt");
std::system(cmd.data());