【发布时间】:2016-12-23 22:26:54
【问题描述】:
我只是尝试使用 sprintf 连接一些字符串,但我遇到了这个问题, 我不明白为什么我的程序在 C 中使用 sprintf 会崩溃。为什么这段代码会运行?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* dateTime = malloc(16*sizeof(char));
printf("Date: %s\n", __DATE__);
printf("Time: %s\n", __TIME__);
sprintf (dateTime, "%s, %s\0", __DATE__, __TIME__);
printf("%s", dateTime);
free(dateTime);
return 0;
}
这个不是吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* dateTime = malloc(16*sizeof(char));
//printf("Date: %s\n", __DATE__);
//printf("Time: %s\n", __TIME__);
sprintf (dateTime, "%s, %s\0", __DATE__, __TIME__);
printf("%s", dateTime);
free(dateTime);
return 0;
}
【问题讨论】:
-
检查
sprintf的返回值。 -
很好奇,为什么
16在char* dateTime = malloc(16*sizeof(char));? -
请注意,字符串末尾的
\0是多余的; C 编译器会自动在字符串末尾添加一个空字节。