【发布时间】:2017-08-09 07:44:13
【问题描述】:
我遇到以下代码:
int get_config(const char *key, char *value) {
FILE *fp = NULL;
char s[100];
char *ret1 = NULL;
char *ret2 = NULL;
fp = fopen(CONFIG_FILE_PATH, "r");
if (fp == NULL) {
perror(CONFIG_FILE_PATH);
return FALSE;
}
while (fgets(s, 100, fp) != NULL) {
//printf("line=%s", s);
ret1 = strstr(s, key);
if (ret1 != NULL) {
ret1 = strstr(s, "=");
if (ret1 != NULL) {
ret1++;
ret2 = strstr(s, "\n");
strncpy(value, ret1, ret2 - ret1);
//printf("ret1=%p ret2=%p\n", ret1,ret2);
value[ret2 - ret1] = 0x0;
printf("config key=%s value=%s\n", key, value);
fclose(fp);
fp = NULL;
ret1 = NULL;
ret2 = NULL;
return TRUE;
}
}
}
我很难理解ret1++ 的作用。如果我正确理解了strstr(),则ret1 = strstr(s, "="); ret1 将包含s 内= 符号之后的所有内容。
假设这不是一个数字,而是一个单词“值”,导致ret1 = value 这对ret1++ 意味着什么?
也许我对 CONFIG_FILE_PATH 的假设是错误的,等号后面总是有一个数字。
旁注:
我只是希望,我知道 CONFIG_FILE_PATH 的样子。但是作为#define CONFIG_FILE_PATH "/etc/config/duvs.conf"但是这个路径很可能是位于设备上的,这个程序是为...写的:/
【问题讨论】:
-
你在说什么?
ret1指向=之后的 C 字符串(可能是空字符串)或等于NULL。 -
Mybe 由于这里的描述,我很困惑:tutorialspoint.com/c_standard_library/c_function_strstr.htm 在下面提供的示例中,
ret等于Point,这让我假设,在我的情况下,ret1也等于一个字符串。因此让我不明白,ret1++有什么意义。 :)
标签: c++ string char increment strstr