我不确定我做错了什么,但我很确定我正在访问内存我不应该考虑打印语句最后是打印乱码。
继承我创建args
结构的地方。
char pureMessage[80];
FILE *file = popen("fortune","r");
if(fread(pureMessage, 80, 1, file) == 0) {
if(feof(file) == 0) {
perror("errorfread");
}
}
strcpy(args->message, pureMessage);
put(args,clnt);
以下是我如何将其打印到控制台:printf("Client PUT: %s\n", args->message);
Heres args struct
struct rpc_args {
char action[20];
char id[80];
char message[80];
};
program DATABASE {
version ASSIGNMENT_7 {
rpc_args ACTION(struct rpc_args) = 1;
} = 1;
} = 0x20fff100;
答案 0 :(得分:0)
strcpy()
是不安全的。最后需要另一个字符作为空字符,所以
fread()
char message[80]
的结构中创建char message[81]
- 然后它在末尾有额外的空字符空间strncpy()
或memcpy()
代替strcpy()
。在前两种情况下,您可以再次使用多个选项来确保结尾处的空字符
pureMessage[79] = '\0'
行之后插入char
pureMessage[80];
(如果你想让缓冲区为1,则为80和81)
char更长)strcat()
代替strcpy()
,并在pureMessage[0] =
'\0'
来电之前插入strcat()
。