繁体   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