实现中缀到后缀,反之亦然算法
我发现,
char * str = (char*) malloc(1);
strcpy(str,str2);
Run Code Online (Sandbox Code Playgroud)
即使str2超过1个字符(20个字符或更多),这也可以工作.
我没有得到任何警告或运行时错误.
这怎么可能?
注意:
我也没有得到垃圾.
无论如何,我总是得到所需的结果str2.
这有效的原因是C取消了内存访问权限.strcpy/strcat没有IDEA你给它们的指针的另一端有多少内存.他们只是假设你知道自己在做什么,然后去做.
至于为什么你没有看到问题:嗯,他们写入了那段记忆.没有什么可以阻止他们写出超出你分配的内容,所以他们这样做了.所以当你稍后再看时,它很好.发生什么了?他们写了别的东西!
他们可能会写一些已经分配过的东西,可能是他们在未分配的空间上写的,可能是你很幸运,他们写了一些无关紧要的东西.
他们可能会在内部结构上写下来,一段时间之后你会让malloc崩溃.
如果你知道你已经以某种方式分配了足够的缓冲区,那么使用这些函数是可以的,但在大多数情况下(特别是如果被复制的东西来自用户),你会想看看strncpy.但要小心,一个人有一些其他陷阱为粗心大意.