为什么会出现以下情况:
#include <stdio.h>
int main(int argc, char *argv[])
{
char array[3] = {'1', '2', '3'};
printf("%s\n", array);
return 0;
}
按预期生成1238À§Wˇ
(&#34; 123&#34; +一些随机字符),而相同的代码包含:
int main(void)
而不是argc
,argv
会产生:123
(尽管空字节没有空间)。
array
void
中{* 1}}空字节空间不足似乎无关紧要?
答案 0 :(得分:3)
你没有提供字符串结尾(EOS)零字节,所以$context['pagination'] = Timber::get_pagination();
一直持续到[刚刚发生]找到一个(即垃圾字符)。
以下任何一项都可行:
printf
答案 1 :(得分:2)
执行此操作时:
char array[3] = {'1', '2', '3'};
printf("%s\n", array);
您正在调用未定义的行为,因为字符数组未终止NUL。你可能会得到&#34; 123&#34;,或者什么也没有,或者是这样的想法,或者它可能会根据任意条件而变化。
在你的特定情况下,只是一个有根据的猜测,在局部变量array
之后它可能是函数参数的内存,而那些恰好是argc
和argv
。根据{{1}}的实际参数,甚至传递给程序的运行时值,内存位置上的字节也会有所不同。有时它们必须在适当的位置有一个NUL字节,并影响程序的输出。
无论如何,我的建议是不要过分思考UB的情况。最好将它们视为 undefined 。