char command[] = "/usr/bin/sn_core.elf getstat 2>/dev/null";fp = popen(command, "r");warning: assignment makes pointer from integer without a cast
时间: 2024-03-11 15:46:56 浏览: 18
这个 warning 的原因是因为 `fp` 变量的类型是一个指针类型,但是 `popen` 函数返回的值并没有被强制转换成指针类型。这可能会导致程序运行时的错误,因为你试图将一个整数解释为指针类型,但是这个整数并没有被正确地初始化为指针变量。你可以通过将返回值强制转换成指针类型来解决这个问题,例如:
```
fp = (FILE *)popen(command, "r");
```
这样就可以消除这个 warning 了。
相关问题
怎么将这段代码的值赋值给一个数组system("/usr/bin/sn_core.elf getstat 2>/dev/null");
要将 system 函数执行命令的结果保存到数组中,可以使用 popen 函数代替 system 函数。popen 函数可以执行命令并打开一个管道,通过该管道读取命令执行结果。具体实现方法如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUF_SIZE 1024
int main() {
char buf[MAX_BUF_SIZE];
FILE *fp = popen("/usr/bin/sn_core.elf getstat 2>/dev/null", "r");
if (!fp) {
perror("popen failed");
exit(EXIT_FAILURE);
}
fgets(buf, MAX_BUF_SIZE, fp);
pclose(fp);
return 0;
}
```
这段代码使用 popen 函数执行命令,并将执行结果读取到 buf 数组中。需要注意的是,buf 数组需要足够大,以容纳命令执行结果。同时,由于使用了 popen 函数,因此也需要注意安全问题,避免命令注入等安全问题。
用c 写一个每隔1秒调用/usr/bin/sn_core.elf getstat 2>/dev/null指令 然后将该指令输出的值存入数组 该数组内还包含7个数组 字数组最大拥有50个值 当第51个值输入时 将第一个值舍弃 以此类推
好的,以下是使用C语言实现每隔1秒调用 `/usr/bin/sn_core.elf getstat 2>/dev/null` 并将输出存入数组中,并实现循环存储的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_ARR_SIZE 7 // 数组个数
#define MAX_STR_LEN 50 // 字符串最大长度
int main() {
char arr[MAX_ARR_SIZE][MAX_STR_LEN]; // 存储数组
int index = 0; // 当前存储位置
while(1) {
// 调用指令并获取输出
FILE *fp = popen("/usr/bin/sn_core.elf getstat 2>/dev/null", "r");
char buf[MAX_STR_LEN];
fgets(buf, sizeof(buf), fp);
pclose(fp);
// 处理输出,存入数组中
buf[strlen(buf)-1] = '\0'; // 去掉换行符
strcpy(arr[index], buf);
index = (index + 1) % MAX_ARR_SIZE; // 循环存储
// 输出数组中的内容
printf("Array:\n");
for(int i = 0; i < MAX_ARR_SIZE; i++) {
printf("%s\n", arr[i]);
}
printf("\n");
// 等待1秒
sleep(1);
}
return 0;
}
```
代码中使用了 `popen()` 函数来调用指令并获取输出,使用了循环存储的方式来实现存储多个值,并且在每次存储值后输出整个数组的内容。