C 大/小端点上的指针减法
这是一个查找字符串长度的示例程序C 大/小端点上的指针减法,c,cpu-architecture,C,Cpu Architecture,这是一个查找字符串长度的示例程序 { char *ptr="Autobiography Of Yogi"; char *a = ptr , *b = &ptr[20]; printf(" length is %d ", (b-a)+1 ); // subtracting pointers to find string length } 我的问题是,这个程序适用于Little和Big endian机器吗?是的,它很好。只有在查看较大整
{
char *ptr="Autobiography Of Yogi";
char *a = ptr , *b = &ptr[20];
printf(" length is %d ", (b-a)+1 ); // subtracting pointers to find string length
}
我的问题是,这个程序适用于Little和Big endian机器吗?是的,它很好。只有在查看较大整数的各个字节时,才会出现问题
endianness对代码没有影响。但由于硬编码的
20
,您的代码仍然很差。注意:指针减法会导致类型ptrdiff\u t
,这可能与int
不同。便携式C99代码使用printf(“%td\n”,(b-a)+1)代码>您的方法的主要问题是,为了使用它,您必须已经知道字符串长度。。。它是21,而不是20。@PaulOgilvie单个字节对Endianness不敏感,他正在减去字符指针。即使他在减去int指针,结果也将是相同的,不管端点是多少。这就是我在这里解释的内容。@Govind Parmar感谢您的编辑,但我将其回滚,因为我认为如果它显示“数据类型大于一个字节”,可能会导致混淆,因为例如字符串大于一个字节,但尾数并不重要。Endianness实际上只对整数(有时是浮点类型)重要。