gpt4 book ai didi

c++ - 从 C 程序执行终端命令,不符合我的预期

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:45 25 4
gpt4 key购买 nike

我正在尝试获取包含 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.ccwifi.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com