2016-04-29 4 views
-1
entry -> data 

держитРазбивает строку на две

"key_string \0 value_string \0" 

(то есть, два каскадных и нулем строки)

Я хочу, чтобы передать ключ и значение в

kvstore_put(&(server ->store), key, value); 

как аргументы.

+1

Почему бы не просто запустить цикл, чтобы найти положение первого завершающего символа? Затем скопируйте с начала на эту позицию и эту позицию + 1 до конца. –

+0

Вы пытались использовать strtok(). Просто имейте в виду, что он изменит строку, переданную в нее. [Похожие сообщения] (http://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c) –

+0

Поскольку delim равно 0, 'strlen' будет работать. –

ответ

1

Один пример пути:

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

void kvstore_put(char key_value[], char key[], char value[]){ 
    strcpy(key, key_value); 
    strcpy(value, strchr(key_value, '\0') + 1); 
} 

int main(void){ 
    char kv[] = "key\0value\0"; 
    char key[sizeof kv]; 
    char value[sizeof kv]; 

    kvstore_put(kv, key, value); 
    puts(key); 
    puts(value); 
    return 0; 
} 

другой способ:

void kvstore_put(char key_value[], char key[], char value[]){ 
    while(*key++ = *key_value++); 
    while(*value++ = *key_value++); 
} 
2

Вам не нужно копировать что-либо - все это может быть сделано с помощью указателей. Поскольку он завершен в ноль, входная строка может удвоиться в качестве ключа. Значение может быть установлено в указателе на строку с:

char *pszValue = strchr (pszKeyString, 0)+1; 

Отсутствие копирования, очень простая реализация.

Смежные вопросы