char temp[50], voltage[50], offset[50], wr1_linkt[50], wr1_loop[50], wr1_onew[50], wr0_linkt[50], wr0_loop[50], wr0_onew[50], time[50]; char buffer[1024]; int counter = 0; FILE *fp = popen("/usr/bin/sn_core.elf getstat 2>/dev/null","r"); if(fp == NULL){ printf("Failed to run\n"); exit(0); } fgets(buffer,sizeof(buffer),fp); char *p = strstr(buffer,"mu:"); sscanf(p,"%*[^0123456789]%[^ ]",wr1_loop); printf("%s\n",wr1_loop[0]); p = strstr(buffer,"dms:"); sscanf(p,"%*[^0123456789]%[^ ]",wr1_onew); printf("%s\n",wr1_onew[0]); p = strstr(buffer,"crtt:"); sscanf(p,"%*[^0123456789]%[^ ]",wr1_linkt); printf("%s\n",wr1_linkt[0]); p = strstr(buffer,"temp:"); sscanf(p,"%*[^0123456789]%[^ ]",temp); printf("%s\n",temp[0]); p = strstr(buffer,"Time:"); sscanf(p,"%*[^0-9+-]%[^.]",time); printf("%s\n",time[0]); pclose(fp); return 0; 出现Segmentation fault
时间: 2024-04-27 07:25:24 浏览: 3
出现 Segmentation fault 错误通常是因为程序访问了不可访问的内存地址,导致程序崩溃。在代码中,可能是因为数组越界或者指针没有被正确初始化等原因导致了该错误。可以通过调试工具来找出错误的具体位置,并进行相应的修复。另外,你的代码中输出变量时使用了 %s,但是变量类型是 char 类型的数组,应该使用 %c 来输出单个字符。
相关问题
char temp[50]; char voltage[50]; char offset[50]; char wr1_linkt[50]; char wr1_loop[50]; char wr1_onew[50]; char wr0_linkt[50]; char wr0_loop[50]; char wr0_onew[50]; char time[50]; char data = {temp,voltage,offset,wr1_linkt,wr1_loop,wr1_onew,wr0_linkt,wr0_loop,wr0_onew};
这段代码有语法错误。变量 data 的类型是 char,但是在初始化时使用了花括号并列出了多个字符串变量,这是不允许的。应该使用一个结构体或者数组来存储这些字符串变量。我来给您举个例子:
```
struct Data {
char temp[50];
char voltage[50];
char offset[50];
char wr1_linkt[50];
char wr1_loop[50];
char wr1_onew[50];
char wr0_linkt[50];
char wr0_loop[50];
char wr0_onew[50];
char time[50];
};
struct Data data = {
"temp value",
"voltage value",
"offset value",
"wr1_linkt value",
"wr1_loop value",
"wr1_onew value",
"wr0_linkt value",
"wr0_loop value",
"wr0_onew value",
"time value"
};
```
这里定义了一个名为 Data 的结构体,包含了10个 char 类型的数组成员。然后使用结构体初始化语法,将每个成员的值分别初始化,并赋值给一个名为 data 的 Data 类型变量。这样就可以存储这些字符串变量了。
char temp[50]; char voltage[50]; char offset[50]; char wr1_linkt[50]; char wr1_loop[50]; char wr1_onew[50]; char wr0_linkt[50]; char wr0_loop[50]; char wr0_onew[50]; char time[50]; int data[10] = {temp,voltage,offset,wr1_linkt,wr1_loop,wr1_onew,wr0_linkt,wr0_loop,wr0_onew,temp};
这段代码仍然有语法错误。变量 data 是一个 int 类型的数组,但是在初始化时使用了花括号并列出了多个字符串变量的地址,这是不允许的。您可以使用一个指向 char 类型数组的指针数组来存储这些字符串变量的地址。我来给您举个例子:
```
char temp[50];
char voltage[50];
char offset[50];
char wr1_linkt[50];
char wr1_loop[50];
char wr1_onew[50];
char wr0_linkt[50];
char wr0_loop[50];
char wr0_onew[50];
char time[50];
char* data[10] = {temp, voltage, offset, wr1_linkt, wr1_loop, wr1_onew, wr0_linkt, wr0_loop, wr0_onew, time};
```
这里定义了一个名为 data 的指针数组,共有10个元素,每个元素都是一个指向 char 类型数组的指针。然后使用数组初始化语法,将每个字符串变量的地址分别初始化,并存储到数组中的对应位置。这样就可以存储这些字符串变量的地址了。需要注意的是,这里的数组初始化语法只适用于指针数组,而不适用于普通数组。