diff --git a/c/opendht.cpp b/c/opendht.cpp
index 9cbfd2b5c6af6ec87f897309e823500ad589118d..ee87e11e8524a68c7a114a04cb3af1c60e32cd18 100644
--- a/c/opendht.cpp
+++ b/c/opendht.cpp
@@ -168,7 +168,8 @@ void dht_runner_run_config(dht_runner* r, in_port_t port, const dht_runner_confi
     config.dht_config.node_config.maintain_storage = conf->dht_config.node_config.maintain_storage;
     config.dht_config.node_config.node_id = *reinterpret_cast<const dht::InfoHash*>(&conf->dht_config.node_config.node_id);
     config.dht_config.node_config.network = conf->dht_config.node_config.network;
-    config.dht_config.node_config.persist_path = conf->dht_config.node_config.persist_path;
+    config.dht_config.node_config.persist_path = conf->dht_config.node_config.persist_path
+        ? std::string(conf->dht_config.node_config.persist_path) : std::string{};
 
     if (conf->dht_config.id.privkey)
         config.dht_config.id.first = *reinterpret_cast<const PrivkeySp*>(conf->dht_config.id.privkey);
@@ -177,9 +178,9 @@ void dht_runner_run_config(dht_runner* r, in_port_t port, const dht_runner_confi
         config.dht_config.id.second = *reinterpret_cast<const CertSp*>(conf->dht_config.id.certificate);
 
     config.threaded = conf->threaded;
-    config.proxy_server = conf->proxy_server;
-    config.push_node_id = conf->push_node_id;
-    config.push_token = conf->push_token;
+    config.proxy_server = conf->proxy_server ? std::string(conf->proxy_server) : std::string{};
+    config.push_node_id = conf->push_node_id ? std::string(conf->push_node_id) : std::string{};
+    config.push_token = conf->push_token ? std::string(conf->push_token) : std::string{};
     config.peer_discovery = conf->peer_discovery;
     config.peer_publish = conf->peer_publish;
     runner->run(port, config);