<分区>
同时实现中缀到后缀算法,反之亦然
我发现,
char * str = (char*) malloc(1);
strcpy(str,str2);
即使 str2
超过 1 个字符(20 个字符或更多)也能正常工作。
我没有收到任何警告或运行时错误。
这怎么可能?
注意:
我也没有得到垃圾。
无论 str2
是什么,我总是能得到所需的结果。
标签 c
<分区>
同时实现中缀到后缀算法,反之亦然
我发现,
char * str = (char*) malloc(1);
strcpy(str,str2);
即使 str2
超过 1 个字符(20 个字符或更多)也能正常工作。
我没有收到任何警告或运行时错误。
这怎么可能?
注意:
我也没有得到垃圾。
无论 str2
是什么,我总是能得到所需的结果。
最佳答案
之所以可行,是因为 C 具有未经检查的内存访问。 strcpy/strcat 不知道你给它们的指针的另一端有多少内存。他们只是假设您知道自己在做什么,然后去做。
至于为什么你没有发现问题:好吧,他们写入了那个内存。没有什么能阻止他们写超出你分配的内容,所以他们这样做了。所以以后再看的时候就好了。发生什么了?他们改写了别的东西!
可能是他们覆盖了已经分配的其他东西,可能是他们覆盖了未分配的空间,可能是你很幸运,他们覆盖了一些无关紧要的东西。
可能是他们覆盖了内部结构,一段时间后您会遇到 malloc 崩溃。
如果您知道您已经以某种方式分配了足够的缓冲区,则可以使用这些函数,但在大多数情况下(尤其是如果被复制的内容来自用户),您将需要查看 strncpy。但要小心,粗心大意的人可能会遇到其他一些陷阱。
关于c - 即使没有分配足够的内存,strcat() 和 strcpy() 也能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800187/