增加char值(超过一个字母)

时间:2017-08-09 07:44:14

标签: c++ string char increment strstr

我遇到以下代码:

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"但是这条路径可能位于设备上,这个程序是为...编写的:/

2 个答案:

答案 0 :(得分:0)

ret1是指针。

我认为你的变量s是" dir=/my/path"。

指向到角色。在您的示例中,如果" =" strstr(s, "=");将返回NULL。尚未找到或其指针在字符串内。含义ret1包含一个字符串,其中包含文本的其余部分,包括" =" (我的例子中是=/my/path)。通过递增1个字符(ret++),指针现在指向同一个字符串后面的一个字符:/my/path

这是使用指针的C代码的基础知识,因为字符串实际上不是语言的一部分,而只是内存数据。

答案 1 :(得分:0)

  

ret1 = strstr(s, "=");之后,ret1将包含所有内容   跟随s中的=符号。

你是对的。 我们假设s是字符串enable=false\nret1ret1++后,它指向字符f。 在语句ret2 = strstr(s, "\n");之后,指针ret2指向字符\n

ret2 - ret1等于5,即子串false的长度。对于指针算术,this article可能对您有帮助。

strncpy(value, ret1, ret2 - ret1);之后,value的内容是字符串false

编辑: 使用CONFIG_FILE_PATH指定的配置文件可能如下所示:

timeout=30
enable=false
priority=5
log=/var/log/mylogfile
...