下面的程序在使用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/