[英]Why in C does a warning line like mentioned in code below is taking next line's string and printing?
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
printf("a"+14);
printf("tera kya hoga kalia \n\n");
return 0;
}
//此代码打印
你好,世界!
卡利亚
捷拉·霍加·卡利亚
//为什么要获取下一行的打印数据。
//是C的新手!!!
该行:
printf("a"+14);
等效于:
char const* s1 = "a";
char const* s2 = s1 + 14;
printf(s2);
表达式s1 + 14
计算为无效的指针。 给定s1
的值,只有s1+0
和s1+1
是有效的指针。
由于s2
是无效的指针,因此该行
printf(s2);
是未定义行为的原因。
实际上,给定s1
的值,对于所有i < 0
和i > 2
,仅计算s1+i
是未定义的行为。
从EOF的评论:
6.5.6加法运算符8 [...]如果指针操作数和结果都指向同一数组对象的元素,或者指向数组对象的最后一个元素,则求值不应产生溢出;否则,将不会产生溢出。 否则,行为是不确定的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.