我需要做一个RPC。我正在尝试编码函数名称的长度,后跟函数的名称。
Function name: say_hello
Function name length: 9
Encoded array: [9, 's', 'a', 'y', ..., 'l', 'l', 'o']
到目前为止:
unsigned char* encode_int(unsigned char *buffer, int value) {
buffer[0] = value >> 24;
buffer[1] = value >> 16;
buffer[2] = value >> 8;
buffer[3] = value;
return buffer + 4;
}
char* function_name = "say_hello";
char* buffer[256];
buffer = encode_int(&buffer, strlen(function_name));
strcpy(buffer, function, strlen(function_name));
puts(buffer);
答案 0 :(得分:0)
您的代码存在很多问题。我不会只给你一个有效的解决方案,但会指出问题所在。第一件事是代码显然不能编译。您正在将未定义的变量function
传递给strcpy,并为strcpy
提供过多的参数。我假设你刚刚错误地转录了程序。但是,即使你修复了这个问题,你也会得到一些编译器警告,如果注意这些警告会识别你的大多数问题。
buffer
的地址而不是buffer
本身的地址传递给encode_int
。buffer
声明为char 指针数组。看起来你真正想要的是一组char
。puts
)。这不会起作用,并且不会产生任何输出(正如您可能已经发现的那样)。因为int在第一个字节中将有一个0值(因为你编码了它)。这是字符串的空终止符,因此是空白输出。编辑:更正到第3点。您实际上已将buffer
增加4(如果其他每个都已修复)。所以puts
只会显示函数名称(如果其他所有内容都已修复)。你已经有效地丢失了函数名称长度。
答案 1 :(得分:0)
将文字放入缓冲区,如下
int len;
len=Strlen(word);
memcpy(buffer,&len,sizeof(Int));
strncpy (&buffer[sizeof (int)],word,len);
将puts行更改为read
printf("%d %s\n",buffer,&buffer[sizeof (int)]);