我在一个我正在编写的c程序中使用redis(使用hiredis c绑定)。
这是我的代码:

void insert(redisContext* c,char* buf){
        static redisReply *reply;
        const char* hash="asdf";
        char* cmd=(char*)malloc((strlen("SET ")+strlen(hash)+strlen(" ")+CHUNKSIZE)*sizeof(char));

        //hash=getHash(buf);
        memcpy(cmd,"SET ",(size_t)strlen("SET "));
        memcpy(cmd+strlen("SET "),hash,(size_t)strlen(hash));
        memcpy(cmd+strlen("SET ")+strlen(hash)," ",(size_t)strlen(" "));
        memcpy(cmd+strlen("SET ")+strlen(hash)+strlen(" "),buf,(size_t)CHUNKSIZE);

        fwrite(cmd,strlen("SET ")+strlen(hash)+strlen(" ")+CHUNKSIZE,sizeof(char),stdout);
        printf("\n\n\n\n\n\n");
        reply=(redisReply*)redisCommand(c,cmd);
        freeReplyObject(reply);

        free(cmd);
}

如您所见,cmd看起来像:SET asdf xxx,其中xxx是512字节长(二进制数据)。
当二进制数据字符串以“\n”开头时出现问题。我一直有一个错误(分割错误)。
有人有什么想法吗?
多谢提前,

最佳答案

我用的是你发布的代码,没有崩溃。
我的代码是:

#define CHUNKSIZE 512
char asd[CHUNKSIZE];
memset(asd, 0, 512);
asd[0] = '\n';
insert(c, asd);

尝试使用valgrind运行你的应用程序,这可能会让你在崩溃之前更好地了解出了什么问题。

关于c - Redis:数据以换行符开头时的SET命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8537484/

10-10 00:47
查看更多