我在一个我正在编写的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/