char* output_file = strstr(str, ">");
时间: 2024-02-13 14:02:59 浏览: 25
`strstr` 函数是 C 语言标准库中的一个字符串处理函数,用于在一个字符串中查找指定子字符串的位置,返回指向第一次出现子字符串的指针。它的函数原型如下:
```c
char *strstr(const char *haystack, const char *needle);
```
其中,`haystack` 是要被搜索的字符串,`needle` 是要搜索的子字符串;返回值是指向第一次出现子字符串的指针,如果没有找到则返回 NULL。
例如,下面的代码将字符串 `"ls > output.txt"` 中的 `">"` 符号找出来:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "ls > output.txt";
char *output_file;
output_file = strstr(str, ">");
printf("Output file: %s\n", output_file);
return 0;
}
```
输出结果为:
```
Output file: > output.txt
```
在这个例子中,`strstr(str, ">")` 返回的是一个指向 `str` 中 `>` 符号的指针,然后可以用这个指针来获取 `>` 符号后面的字符串。
相关问题
void parse_temperature(char *line) { char *temp_str; char *token; char *mode_str, *mu_str,*dms_str,*crtt_str; // 解析温度 if ((temp_str = strstr(line, "temp: ")) != NULL) { temp_str += strlen("temp: "); temp = strtof(temp_str, NULL); } if((mode_str = strstr(line,"WR mode: ")) != NULL){ mode_str += strlen("WR mode: "); int result = sscanf(mode_str,"%c",&mode); if(result != 1){ printf("mode is NULL!\n"); } } if(mode == "WRC_SLAVE_WR1"){ if((mu_str = strstr(line,"mu: ")) != NULL){ mu_str += strlen("mu: "); wr1_loopb = strtol(mu_str,NULL,10); } if((dms_str = strstr(line,"dms: ")) != NULL){ dms_str += strlen("dms: "); wr1_onew = strtol(dms_str,NULL,10); } if((crtt_str = strstr(line,"crtt: ")) != NULL){ crtt_str += strlen("crtt: "); wr1_linkt = strtol(crtt_str,NULL,10); } }else if(mode == "WRC_SLAVE_WR0"){ if((mu_str = strstr(line,"mu: ")) != NULL){ mu_str += strlen("mu: "); wr0_loopb = strtol(mu_str,NULL,10); } if((dms_str = strstr(line,"dms: ")) != NULL){ dms_str += strlen("dms: "); wr0_onew = strtol(dms_str,NULL,10); } if((crtt_str = strstr(line,"crtt: ")) != NULL){ crtt_str += strlen("crtt: "); wr0_linkt = strtol(crtt_str,NULL,10); } } } 优化代码
可以优化代码,将 if/else 分支语句中的相同代码提取出来,避免重复代码。例如:
```
void parse_temperature(char *line) {
char *temp_str;
char *token;
char *mode_str, *mu_str,*dms_str,*crtt_str;
// 解析温度
if ((temp_str = strstr(line, "temp: ")) != NULL) {
temp_str += strlen("temp: ");
temp = strtof(temp_str, NULL);
}
if((mode_str = strstr(line,"WR mode: ")) != NULL){
mode_str += strlen("WR mode: ");
int result = sscanf(mode_str,"%c",&mode);
if(result != 1){
printf("mode is NULL!\n");
}
if(mode == "WRC_SLAVE_WR1" || mode == "WRC_SLAVE_WR0") {
if((mu_str = strstr(line,"mu: ")) != NULL){
mu_str += strlen("mu: ");
if(mode == "WRC_SLAVE_WR1") {
wr1_loopb = strtol(mu_str,NULL,10);
} else {
wr0_loopb = strtol(mu_str,NULL,10);
}
}
if((dms_str = strstr(line,"dms: ")) != NULL){
dms_str += strlen("dms: ");
if(mode == "WRC_SLAVE_WR1") {
wr1_onew = strtol(dms_str,NULL,10);
} else {
wr0_onew = strtol(dms_str,NULL,10);
}
}
if((crtt_str = strstr(line,"crtt: ")) != NULL){
crtt_str += strlen("crtt: ");
if(mode == "WRC_SLAVE_WR1") {
wr1_linkt = strtol(crtt_str,NULL,10);
} else {
wr0_linkt = strtol(crtt_str,NULL,10);
}
}
}
}
}
```
这样可以减少代码冗余,提高代码的可读性和可维护性。
char *json_str ="Unregistered={"tml_id":"jjj"\n}";怎么解析出来jjj 不使用库写
如果你不想使用第三方库,你可以手动解析 JSON 字符串。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *get_value(char *json_str, char *key) {
char *start = strstr(json_str, key);
if (start == NULL) {
return NULL;
}
start += strlen(key) + 3;
char *end = strchr(start, '\"');
if (end == NULL) {
return NULL;
}
int len = end - start;
char *value = malloc(len + 1);
strncpy(value, start, len);
value[len] = '\0';
return value;
}
int main() {
char *json_str ="Unregistered={\"tml_id\":\"jjj\"\n}";
char *value = get_value(json_str, "tml_id");
if (value == NULL) {
printf("Failed to get tml_id\n");
return -1;
}
printf("tml_id: %s\n", value);
free(value);
return 0;
}
```
运行结果同样为:
```
tml_id: jjj
```
请注意,这个手动解析 JSON 的方法只适用于非常简单的 JSON,对于复杂的 JSON,使用第三方库会更加方便和安全。