line打印出来是Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:10110 lock:1 wr1 -> lnk:1 rx:9123 tx:2598 lock:1 syncs:wr1 sv:1 ss:'TRACK_PHASE' aux:0 sec:2653 nsec:197479840 mu:869694 dms:430077 dtxm:240682 drxm:191022 dtxs:241345 drxs:182145 asym:9540 crtt:14500 cko:-8 setp:4150 hd:57967 md:33250 ad:65000 ucnt:2399 temp: 47.750 C Time: Thu, Jan 1, 1970, 00:44:13 +487604944 nanoseconds. mode_str = strstr(line,"mode : ") + strlen("mode : "); 有段错误
时间: 2023-08-10 20:09:14 浏览: 81
根据你提供的信息,从 `line` 中提取 `mode_str` 的代码看起来没有问题。但是,可能是在使用 `mode_str` 的过程中出现了问题。具体来说,由于你没有提供使用 `mode_str` 的代码,我无法确定问题的具体原因。建议你检查一下使用 `mode_str` 的代码,看看是否有可能出现了越界访问、空指针引用等问题。另外,你也可以将错误信息提供给我,以便更好地理解问题所在。
相关问题
用c实现/usr/bin/sn_core.elf getstat打印出来的是 Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:27153 lock:1 wr1 -> lnk:1 rx:0 tx:0 lock:1 temp: 44.875 C Time: Fri, Mar 24, 2023, 03:01:36 +407237376 nanoseconds. 将temp 和 Time的值放到数组中
好的,我理解了你的问题。首先,需要解析 `/usr/bin/sn_core.elf getstat` 命令的输出,提取出其中的 `temp` 和 `Time` 的值,然后将它们存储到数组中。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1024
int main() {
char command[] = "/usr/bin/sn_core.elf getstat"; // 执行的命令
char line[MAX_LINE_LENGTH]; // 用于存储命令输出的每行内容
char *temp_str, *time_str; // 用于存储解析出的温度和时间的字符串
float temp; // 存储解析出的温度的值
char time[MAX_LINE_LENGTH]; // 存储解析出的时间的字符串
int time_ns; // 存储解析出的时间的纳秒值
char *token; // strtok 函数的返回值
int i = 0; // 存储已经存储了多少个元素到数组中
char *array[2]; // 存储解析出的温度和时间的数组
// 执行命令并逐行读取输出
FILE *fp = popen(command, "r");
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
// 解析温度
if ((temp_str = strstr(line, "temp: ")) != NULL) {
temp_str += strlen("temp: ");
temp = strtof(temp_str, NULL);
}
// 解析时间
if ((time_str = strstr(line, "Time: ")) != NULL) {
time_str += strlen("Time: ");
strncpy(time, time_str, MAX_LINE_LENGTH);
time[strlen(time) - 1] = '\0'; // 去掉行末的换行符
// 解析纳秒值
token = strtok(time, " +");
while (token != NULL) {
if (strchr(token, 'n') != NULL) {
time_ns = strtol(token, NULL, 10);
break;
}
token = strtok(NULL, " +");
}
}
}
pclose(fp);
// 将解析出的温度和时间存储到数组中
array[i++] = malloc(sizeof(float));
memcpy(array[i - 1], &temp, sizeof(float));
array[i++] = malloc(sizeof(char) * MAX_LINE_LENGTH);
strcpy(array[i - 1], time);
// 打印数组内容
for (int j = 0; j < i; j++) {
if (j == 0) {
printf("温度:%f\n", *((float *)array[j]));
} else {
printf("时间:%s\n", array[j]);
}
free(array[j]);
}
return 0;
}
```
这段代码首先执行 `/usr/bin/sn_core.elf getstat` 命令,并逐行读取其输出。当解析到 `temp` 或 `Time` 时,提取出对应的字符串,并解析出温度和时间的值。然后将这些值存储到数组中,并打印出来。需要注意的是,由于温度是一个浮点数,而数组只能存储同类型的数据,所以需要使用 `memcpy` 函数将其存储到数组中。同时,由于 `strtok` 函数会修改原始字符串,因此需要先将时间字符串复制到另一个数组中。
希望能够帮到你!
/usr/bin/sn_core.elf getstat 2>/dev/null指令打印出来的是 Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:20946 lock:1 wr1 -> lnk:1 rx:0 tx:0 lock:1 temp: 45.000 C Time: Fri, Mar 24, 2023, 02:20:10 +606379680 nanoseconds. 根据指令打印出来的值 如何将我想要的值放到数组中
您可以使用shell脚本将指令输出的内容存储到一个变量中,然后使用字符串处理的方式提取所需的值,并将其存储到数组中。以下是一个示例脚本,可根据您的实际需求进行修改:
```
#!/bin/bash
# 执行指令并将输出存储到变量中
output=$(/usr/bin/sn_core.elf getstat 2>/dev/null)
# 使用字符串处理提取所需的值
temp=$(echo "$output" |grep -oP 'temp:\s+\K[\d.]+')
time=$(echo "$output" |grep -oP 'Time:\s+\K.*')
# 将所需的值存储到数组中
values=("$temp" "$time")
# 输出数组中的值
echo "${values[0]}"
echo "${values[1]}"
```
该脚本中,首先执行指令并将输出存储到变量 `output` 中。然后使用 `grep` 命令和正则表达式提取温度值和时间值,并将它们存储到数组 `values` 中。最后输出数组中的值。
阅读全文