entry -> data
"key_string \0 value_string \0"
(das heißt, zwei verketteten und null terminierten Strings)
ich den Schlüssel und Wert in
kvstore_put(&(server ->store), key, value);
übergeben möchten als Argumente.
entry -> data
"key_string \0 value_string \0"
(das heißt, zwei verketteten und null terminierten Strings)
ich den Schlüssel und Wert in
kvstore_put(&(server ->store), key, value);
übergeben möchten als Argumente.
Ein Beispiel für die Art und Weise:
#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;
}
eine andere Art und Weise:
void kvstore_put(char key_value[], char key[], char value[]){
while(*key++ = *key_value++);
while(*value++ = *key_value++);
}
Sie brauchen nichts zu kopieren - sie können alle mit Zeigern durchgeführt werden. Da der Wert null ist, kann die Eingabezeichenfolge als Schlüssel verwendet werden. Der Wert kann in einem String-Pointer gesetzt werden mit:
char *pszValue = strchr (pszKeyString, 0)+1;
Kein Kopieren, sehr einfache Implementierung.
Warum nicht einfach eine Schleife ausführen, um die Position des ersten abschließenden Zeichens zu finden? Dann kopiere vom Anfang an diese Position, und diese Position + 1 bis zum Ende. –
haben Sie versucht, strtok() zu verwenden. Beachten Sie, dass die darin übergebene Zeichenfolge geändert wird. [Similar Post] (http://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c) –
Weil das Delim 0 ist, wird 'strlen' funktionieren. –