use*_*063 1 c segmentation-fault
我有以下代码:
char* str = "01248";
printf("%x \n", str[str[1] + str[3]]);
Run Code Online (Sandbox Code Playgroud)
因为str[1]+str[3] = 101,代码寻找str [101].
这段代码会(总是)得到分段错误错误吗?或者我们在这个地址有变化,我们会打印一些东西?
这将始终调用未定义的行为.
如果没有获得未定义的行为,那么你就无法进行索引.
究竟发生了什么,等待它,未定义.它可能导致段错误,可能根本没有问题,可能会打印一些值,你只是无法知道.
如果即使没有"坏"发生并且打印了一些值,程序仍然是错误的并且被打破.
当然,这和正义之间没有区别
printf("%x\n", str[101]); /* BAD CODE! */
Run Code Online (Sandbox Code Playgroud)
通过添加两个有效的解引用来计算无效数组索引的事实并不重要,这只是一个额外的混淆层.此外,你不能"知道" 1+ 4是任何特定的数值,这取决于目标机器的字符编码.在ASCII中,它将是49 + 52,即101.你甚至不知道'1'+ '4'是正数.