[英]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.