簡體   English   中英

為什么在C中,下面的代碼中提到的警告行正在獲取下一行的字符串並打印?

[英]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+0s1+1是有效的指針。

由於s2是無效的指針,因此該行

printf(s2);

是未定義行為的原因。

實際上,給定s1的值,對於所有i < 0i > 2 ,僅計算s1+i是未定義的行為。

從EOF的評論:

6.5.6加法運算符8 [...]如果指針操作數和結果都指向同一數組對象的元素,或者指向數組對象的最后一個元素,則求值不應產生溢出;否則,將不會產生溢出。 否則,行為是不確定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM