#define MAX_LINE_LENGTH 1024 #define MAX_RECORDS 50 char command[] = "/usr/bin/sn_core.elf getstat 2>/dev/null"; char line[MAX_LINE_LENGTH]; float temp; char *Temp[MAX_RECORDS] = {0}; int index = 0; void parse_temperature(char *line) { char *temp_str; char *token; temp = 0; // 解析温度 if ((temp_str = strstr(line, "temp: ")) != NULL) { temp_str += strlen("temp: "); temp = strtof(temp_str, NULL); } } void add_record(float temp) { if (index >= MAX_RECORDS) { free(Temp[0]); memmove(Temp, Temp + 1, (MAX_RECORDS - 1) * sizeof(float *)); index--; } Temp[index] = malloc(sizeof(float *)); memcpy(Temp[index], &temp, sizeof(float *)); index++; } void print_records() { for (int i = 0; i < index; i++) { printf("温度:%f\n", *((float *)Temp[i])); } } int main() { FILE *fp; while (1) { fp = popen(command, "r"); if(fp = NULL){ printf("Error running command.\n"); exit(1); } while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) { parse_temperature(line); } pclose(fp); add_record(temp); print_records(); sleep(1); } return 0; } 出现段错误
时间: 2024-04-21 14:26:16 浏览: 213
C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别
在代码中,有一个错误:在 malloc() 和 memcpy() 调用时,应该传递 sizeof(float) 而不是 sizeof(float *)。因为 Temp 数组是用于存储 float 类型的指针,而不是指向 float 类型的指针的指针,因此应该使用 sizeof(float)。修改这个错误应该可以解决段错误问题。同时,判断 fp 是否为 NULL 的语句应该是 if(fp == NULL),而不是 if(fp = NULL)。
阅读全文