TA的每日心情![](source/plugin/dsu_paulsign/img/emot/wl.gif) | 无聊 2013-9-23 22:35 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
先贴上代码- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int main()
- {
- char *tmp;
- char *ptr;
- tmp=malloc(sizeof(char)*2);
- scanf("%s",ptr);
- strcpy(tmp,ptr);
-
- printf("ptr:%ld\n",strlen(ptr));
- printf("tmp:%ld\n",strlen(tmp));
- free(tmp);
- return 0;
- }
复制代码
有个不明白的地方:
为指针tmp分配了2个char的内存,为什么不论ptr指向的字符串有多长,strcpy(tmp,ptr)都能执行?
将程序改为以下形式,仍然可以运行:- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int main()
- {
- char tmp[2];
- char ptr[]="test";
- strcpy(tmp,ptr);
- printf("tmp:%s,sizeof:%ld,\n",tmp,sizeof(tmp));
- printf("ptr:%ld\n",strlen(ptr));
- printf("tmp:%ld\n",strlen(tmp));
- return 0;
- }
复制代码 这里tmp明显没有足够的空间容纳ptr的字符串,为什么还能运行呢? |
|