entry -> data
держитРазбивает строку на две
"key_string \0 value_string \0"
(то есть, два каскадных и нулем строки)
Я хочу, чтобы передать ключ и значение в
kvstore_put(&(server ->store), key, value);
как аргументы.
entry -> data
держитРазбивает строку на две
"key_string \0 value_string \0"
(то есть, два каскадных и нулем строки)
Я хочу, чтобы передать ключ и значение в
kvstore_put(&(server ->store), key, value);
как аргументы.
Один пример пути:
#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++);
}
Вам не нужно копировать что-либо - все это может быть сделано с помощью указателей. Поскольку он завершен в ноль, входная строка может удвоиться в качестве ключа. Значение может быть установлено в указателе на строку с:
char *pszValue = strchr (pszKeyString, 0)+1;
Отсутствие копирования, очень простая реализация.
Почему бы не просто запустить цикл, чтобы найти положение первого завершающего символа? Затем скопируйте с начала на эту позицию и эту позицию + 1 до конца. –
Вы пытались использовать strtok(). Просто имейте в виду, что он изменит строку, переданную в нее. [Похожие сообщения] (http://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c) –
Поскольку delim равно 0, 'strlen' будет работать. –