gpt4 book ai didi

c - 记录开头出现奇怪的字符 - C

转载 作者:行者123 更新时间:2023-11-30 18:33:02 25 4
gpt4 key购买 nike

每当用户执行某些操作时,我都会尝试记录到日志文件中,并包含日期,但是当我这样做时,在每个日志的开头,我会得到一个奇怪的符号。

        char log[200];
char datetime[200];
time_t now = time(NULL);
strftime(datetime,200,"%x %X", localtime(&now));
strcat(log,datetime);
sendline[strlen(sendline)-1] = 0;
strncat(log," - ",3);
strcat(log,sendline);
recvline[strlen(recvline)-1] = 0;
strncat(log," - ",3);
strcat(log,recvline);
strncat(log,"\n",1);
fprintf(fp,"%s",log);

这是我每次输入时得到的符号

This is the symbol I am getting with each entry

我该如何解决这个问题以及为什么会发生这种情况?

最佳答案

当您调用 strcat(log,datetime); 时,

log 未初始化,因此,存在未定义的行为。

    char log[200];
char datetime[200];
time_t now = time(NULL);
strftime(datetime,200,"%x %X", localtime(&now));
strcat(log,datetime);

或者更准确地说,由于声明为堆栈数组,log 中可能存在垃圾字符 - 拾取堆栈上发生的任何内容。修复方法很简单。将 strcat 调用更改为 strcpy:

    strcpy(log,datetime);

或者,您可以通过减少对 strcat 的调用来提高代码效率,并避免冗余字符串副本(以及潜在的缓冲区溢出)。将此视为您已经编写的内容的替代方案:

    char datetime[200];
time_t now = time(NULL);
strftime(datetime,200,"%x %X", localtime(&now));
sendline[strlen(sendline)-1] = 0;
recvline[strlen(recvline)-1] = 0;
fprintf(fp, "%s - %s - %s\n", datetime, sendline, recvline);

关于c - 记录开头出现奇怪的字符 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59813427/

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