我正在准备面试并遇到一个我无法弄清楚的练习题。这是代码:
#include <stdio.h>
int main()
{
char *p,*q;
p=(char *)malloc(25);
q=(char *) malloc(25);
strcpy(p,"amazon" );
strcpy(q,"hyd");
strcat(p,q);
printf("%s\n",p);
}
我编译并执行它,但它工作得很好。代码存在问题,这使我怀疑它与未初始化的变量有关。输出就像它应该的亚马逊水。有人能让我知道我错过了什么吗?
编辑:这是一个练习面试问题,问题是在这段代码中询问有什么问题。
答案 0 :(得分:5)
缺少包含。
malloc
函数需要stdlib.h,而strcpy
和strcat
需要string.h。没有它们,假定这些函数在int
中返回。
如果malloc
sizeof(int) != sizeof(void *)
,这尤其成问题。由于隐含定义与实际定义不匹配,因此您调用undefined behavior。未定义行为表现出来的方法之一是该程序似乎正常工作。但是,这种行为无法保证。
要使程序符合要求,请在顶部添加以下内容。
#include <stdlib.h>
#include <string.h>
此外,此程序分配内存但不free
。每次拨打malloc
都应该对free
进行相应的调用。否则,您有内存泄漏。
在调用printf
之后添加以下内容以修补内存泄漏。
free(p);
free(q);