这是我的程序: void getSoftVersion(char *major, char *minor, char *patch, char *custom) { int data = 0; char version[48]; char* token = NULL; *custom = 0; mkSoftVersion(version); printf("version:%s\n", version); token = strtok(version, "B(build"); if(token == NULL) { printf("11111111111\n"); sscanf(version, "V%d.%d.%d.%dC(build %d)", major, minor, patch, custom, &data); } else { printf("2222222222\n"); sscanf(version, "V%d.%d.%dB(build %d)", major, minor, patch, &data); } printf("major:%d, minor:%d, patch:%d, custom:%d,\n", *major, *minor, *patch, *custom); return; } 结果: version:V2.0.1.1C(build 230524) 2222222222 major:2, minor:0, patch:1, custom:0, 为什么这个时候无法进入if(token == NULL)这个条件?
时间: 2023-12-14 11:39:23 浏览: 114
这个问题可能是因为在使用`strtok()`函数时,你没有考虑到版本号中可能包含的空格字符导致分割出错。
你可以尝试使用`strchr()`函数来查找字符串中特定字符的位置,然后再使用`sscanf()`函数来解析版本号。具体代码如下:
```
void getSoftVersion(char *major, char *minor, char *patch, char *custom) {
int data = 0;
char version[48];
*custom = 0;
mkSoftVersion(version);
printf("version:%s\n", version);
char* token = strchr(version, 'B');
if (token == NULL) {
printf("11111111111\n");
sscanf(version, "V%d.%d.%d.%dC(build %d)", major, minor, patch, custom, &data);
} else {
printf("2222222222\n");
sscanf(version, "V%d.%d.%d%dB(build %d)", major, minor, patch, custom, &data);
}
printf("major:%d, minor:%d, patch:%d, custom:%d,\n", *major, *minor, *patch, *custom);
return;
}
```
这里使用了`strchr()`函数来查找字符串中第一个'B'字符的位置,然后根据不同的情况使用不同的格式字符串解析版本号。
阅读全文