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

hältSplit-String in zwei

"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.

+1

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. –

+0

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) –

+0

Weil das Delim 0 ist, wird 'strlen' funktionieren. –

Antwort

1

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++); 
} 
2

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.

Verwandte Themen