gpt4 book ai didi

c - 字符串最后打印出一些乱码,我一定是在 C 中错误地创建了一个字符串

转载 作者:行者123 更新时间:2023-11-30 17:01:40 26 4
gpt4 key购买 nike

我不确定我做错了什么,但我很确定我正在访问内存,我不应该考虑打印语句最后打印出乱码。

这是我创建我的 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);

这里是参数结构

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;

最佳答案

如果您从中复制的内存缓冲区(在本例中是文件中的字节序列)不是以 null 终止的,则

strcpy() 是不安全的。您需要另一个字节作为末尾的空字符,因此

  • 要么使用 fread() 只读取 79 个字符
  • 或者您在写入 char message[81] 的结构中创建 char message[80] - 然后它在末尾有额外的空字符空间
  • 或者如果您不希望结构中包含消息,则可以使用 strncpy()memcpy() 而不是 strcpy()以 null 终止。

在前两种情况下,您再次有多种选择来确保末尾有空字符

  • char 行后插入 pureMessage[79] = '\0'pureMessage[80]; (或者 80 和 81,如果你想让缓冲区为 1炭更长)
  • 使用 strcat() 而不是 strcpy() 并插入 pureMessage[0] =
    '\0'
    strcat() 调用之前。

关于c - 字符串最后打印出一些乱码,我一定是在 C 中错误地创建了一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36909505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com