Problem with Hiredis Binding

Puming zhaopuming at gmail.com
Thu Jan 5 18:38:14 PST 2012


On Thursday, 5 January 2012 at 22:02:25 UTC, Andrej Mitrovic 
wrote:

> Your problem is that you're calling printf on a static char 
> array. If
> you're going to use printf you have to use it on the .ptr 
> (pointer)
> field of the static array. Replace this call:
>
>   printf("Connection error: %s\n", c.errstr);
> with
>   printf("Connection error: %s\n", c.errstr.ptr);
>
> On my end I get:
> Connection error: Connection refused
>
> Also I think you should replace the "int integer" in struct 
> redisReply
> to "long integer". I think `long long` in C is 8 bytes, which 
> is the
> equivalent to D's long type.

Thanks for the tip. I've changed code as you suggested.
And for the type `long long`, I changed `int` to `c_long` (in 
core.stdc.config) according to http://dlang.org/interfaceToC.html

But there is still problem. My code does actually connect, as I 
have a redis-server running on my machine, and the commands 
actually runned, as I use a redis-cli and found that "foo : bar" 
is actually set into redis. But

---
  reply = cast(redisReply*) redisCommand(c, "GET foo");
  writefln("GET foo: %s", *reply);
  writefln(to!string(reply.str));
----

output these:

---
GET foo: redisReply(1, 0, 0, 2, 152397072, 0)
80B1F42
段错误  // (which is Chinese for Segfault)
---

So maybe I got it wrong when converting char* to string?







More information about the Digitalmars-d-learn mailing list