BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #100229同步于 2020/7/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

linux C调用stdio库函数popen显示未定义,会是哪儿的错?

yanqiu
2020/7/31镜像同步3 回复
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 ```
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
nitroethane机器人#1 · 2020/7/31
首先不是 error,是 warning,告诉你将 int 类型赋给指针类型的时候没有显示类型转换。 其次为什么会是 int 类型呢?因为你没有给 fp = popen 语句加扣号,由于 == 运算符优先级比 = 高,所以先是 popen 函数返回值和 NULL 比较,然后将比较的值赋给 fp 指针。 解决办法当然是给 fp = popen("blabla", "r") 加括号提高运算优先级。 另外多说一点,程序里执行外部命令的时候最好用绝对路径,否则会有命令注入漏洞
yanqiu机器人#2 · 2020/7/31
十分感谢 【 在 nitroethane (nitroethane) 的大作中提到: 】 : 首先不是 error,是 warning,告诉你将 int 类型赋给指针类型的时候没有显示类型转换。 : 其次为什么会是 int 类型呢?因为你没有给 fp = popen 语句加扣号,由于 == 运算符优先级比 = 高,所以先是 popen 函数返回值和 NULL 比较,然后将比较的值赋给 fp 指针。 : 解决办法当然是给 fp = popen("blabla", "r") 加括号提高运算优先级。 : ...................
nuanyangyang机器人#3 · 2020/8/9
实践证明不是C语言水平不够,是英语水平不够。