如何将值存储在双引号逗号

时间:2017-02-28 08:58:32

标签: c strstr

char string[200]="ret=\"y\"  err=\"000\"";
    char stringg[50];
    char *arg;
    arg  = strstr (string, "ret");
    memcpy(stringg,arg+5,1);
    printf(stringg);

我想要复制“ret”的值,上面的程序给出输出但是当ret的值改变时我必须在程序中进行更改。如何解决这个问题

1 个答案:

答案 0 :(得分:0)

在您的代码中,他们无需对您的数组string进行限制。你可以简单地使用:

const char string[] = "ret=\"y\"  err=\"000\"";

使用"ret"找到strstr()的值,并检查未返回NULL后,可以将所有内容复制到单独的数组或指针中,然后在找到第一个空间。这将确保复制ret = "y"。找到空格后,使用\0终结符终止数组或指针。

然后,您可以使用strchr(3)查找'='字符的位置,如果存在,则将其后的值指定给另一个变量。然后,此变量将包含等号后面的值。

以下是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    const char string[] = "ret=\"y\"  err=\"000\"";
    const char *key = "ret";
    const char equals = '=', space = ' ', quote = '"';
    char *start, *copy, *next, *value;
    size_t i;

    start = strstr(string, key);
    if (start != NULL) {
        copy = strdup(start);
        if (copy == NULL) {
            fprintf(stderr, "Failed to copy contents of string\n");
            exit(EXIT_FAILURE);
        }
        for (i = 0; start[i] != space && start[i] != '\0'; i++) {
            copy[i] = start[i];
        }
        copy[i] = '\0';

        next = strchr(copy, equals);
        if (next != NULL) {
            next++;
            if (*next == quote) {
                next++;
                next[strlen(next)-1] = '\0';
                value = next;
            }
        }

        printf("%s = %s\n", key, value);

        free(copy);
    }

    return 0;
}