下面的程序在使用gcc编译器和turbo C编译时会给出不同的结果

#include<stdio.h>
#include<string.h>

void main()
{
    char* c = "gatecs2017";
    char* p = c;
    printf( "%d", (int)strlen( c + 2[p] - 6[p] - 1 ) );
}

有人请解释一下这个程序的工作原理。为什么会产生不同的结果?

最佳答案

strlen(c+2[p]-6[p]-1)被转换为strlen(((c + 't') - '2') - 1)=strlen(((c + 116) - 50) - 1),因此,访问超出字符串边界(未定义的行为)。

关于c - C中字符串函数strlen()的不同输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42221564/

10-13 06:41