malloc放置"垃圾"值

JOS*_*OSI 1 c malloc strcat garbage

我如何防止或绕过我的变量中的垃圾valus malloc put?附上代码和输出!谢谢!

#include <stdio.h>
#include "stdlib.h"
#include <string.h>

int main() {
    char* hour_char = "13";
    char* day_char = "0";
    char* time = malloc(strlen(hour_char)+strlen(day_char)+2);
    time = strcat(time,day_char);
    time = strcat(time,"-");
    time = strcat(time,hour_char);
    printf("%s",time);
    free(time);
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

á[?0-13
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

第一个strcat是不正确的,因为malloc-ed内存未初始化.而不是strcat用于第一次写,使用strcpy.这是有道理的,因为最初time没有连接任何东西的字符串.

time = strcpy(time, day_char);
time = strcat(time, "-");
time = strcat(time, hour_char);
Run Code Online (Sandbox Code Playgroud)

更好的是,使用sprintf:

sprintf(time, "%s-%s", day_char, hour_char);
Run Code Online (Sandbox Code Playgroud)

  • 更好的是,使用 `snprintf`。 (2认同)