返回信息流popen函数是stdio.h里的,这里没找到所以显示返回int。昨天晚上写的程序还能用,今天就找不到这个函数了。摊手。刚刚接触linux下的编程。
看到ctrl 点sprintf会定向到stdio2
h,这个里面确实没有popen。
ctrl点 #include<stdio.h>会定向到stdio.h文件
这两个有什么区别?
make报错:
```cpp
[root@iZ2ze2y6fwj9mvujtsiya4Z test_mem]# make
gcc -c systeminfo.c
systeminfo.c: In function ‘get_cpu_info’:
systeminfo.c:56:10: warning: assignment makes pointer from integer without a cast [enabled by default]
if(fp=popen("cat /proc/cpuinfo|grep cpu\\ MHz|sed -e 's/.*:[^0-9]//'","r")==NULL){
^
gcc -o main main.o systeminfo.o cpuusage.o
```
这是一条镜像帖。来源:北邮人论坛 / cpp / #100229同步于 2020/7/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
linux C调用stdio库函数popen显示未定义,会是哪儿的错?
yanqiu
2020/7/31镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
首先不是 error,是 warning,告诉你将 int 类型赋给指针类型的时候没有显示类型转换。
其次为什么会是 int 类型呢?因为你没有给 fp = popen 语句加扣号,由于 == 运算符优先级比 = 高,所以先是 popen 函数返回值和 NULL 比较,然后将比较的值赋给 fp 指针。
解决办法当然是给 fp = popen("blabla", "r") 加括号提高运算优先级。
另外多说一点,程序里执行外部命令的时候最好用绝对路径,否则会有命令注入漏洞
十分感谢
【 在 nitroethane (nitroethane) 的大作中提到: 】
: 首先不是 error,是 warning,告诉你将 int 类型赋给指针类型的时候没有显示类型转换。
: 其次为什么会是 int 类型呢?因为你没有给 fp = popen 语句加扣号,由于 == 运算符优先级比 = 高,所以先是 popen 函数返回值和 NULL 比较,然后将比较的值赋给 fp 指针。
: 解决办法当然是给 fp = popen("blabla", "r") 加括号提高运算优先级。
: ...................