我正在尝试获取包含 WiFi 信号强度的变量。从终端执行以下命令成功返回
iwconfig wlan0 |grep Signal| cut -d"=" -f3 |cut -d" " -f1
返回率为 74/100
但是,当我将其放入 system() 调用中时,出现以下编译错误。
int main (){
system("iwconfig wlan0 |grep Signal| cut -d"=" -f3 |cut -d" " -f1");
return 0;
}
当我编译那个...
$ c++ wifi.cc wifi.cc:在函数“int main()”中:
wifi.cc:8:59: 错误:分配只读位置‘"iwconfig $_[0]|grep Signal|cut -d"’
wifi.cc:8:59: 错误:将“const char [16]”赋值给“const char [34]”时类型不兼容
非常感谢任何想法/建议。
最佳答案
这是因为您的字符串文字中包含未转义的引号。你需要逃避他们:
system("iwconfig wlan0 |grep Signal| cut -d\"=\" -f3 |cut -d\" \" -f1");
在您的错误代码中,引号是这样配对的:
system("iwconfig wlan0 |grep Signal| cut -d"=" -f3 |cut -d" " -f1");
^ ^ ^ ^ ^ ^
└─────────────────1─────────────────┘ └──────2─────┘ └─3──┘
如您所见,共有三个独立的字符串文字。转义引号后,就 C++ 而言,只有一对引号:
system("iwconfig wlan0 |grep Signal| cut -d\"=\" -f3 |cut -d\" \" -f1");
^ ^
└──────────────────────────────1──────────────────────────────┘
转义引号(前面带有 \
的引号)只是字符串的一部分。
但是,在终端中,命令不是某个字符串的一部分。它本身只是一个命令,引号是这样配对的:
iwconfig wlan0 |grep Signal| cut -d"=" -f3 |cut -d" " -f1
^ ^ ^ ^
└1┘ └2┘
关于c++ - 从 C 程序执行终端命令,不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004913/