在这个代码片段中,strncpy
的n
值是两个char
指针的差值。如何减去两个字符串指针?这里n
的值是多少?
程序编译成功,但大小不一定是int值吗?
void replace(char *s1) {
char r[4][5] = { "get", "tell", "your", "house" };
char rep[4][10] = { "see", "us", "tall", "kite" };
char buff[500];
int i;
char *ch;
for (i < 0; i < 4; i++) {
if ((ch = strstr(s1, r[i]))) {
strncpy(buff, s1, ch - s1);
buff[ch-s1] = 0;
sprintf(buff + (ch - s1), "%s%s", rep[i], ch + strlen(r[i]));
s1[0] = 0;
strcpy(s1, buff);
return replace(s1);
}
}
}
如果有两个指针p和q指向同一个数组,则p-q的计算结果为数组中p和q之间的元素数(带符号)。例如,考虑以下代码:
int array[137];
int* p = &arr[10];
int* q = &arr[5];
ptrdiff_t diff = p - q;
这里,p指的是数组的第十个元素,q指的是阵列的第五个元素,所以p-q是五。(特殊类型ptrdiff_t是一个整数类型,它足够大,可以容纳任何两个指针的差。)
解释这种差异的另一种方法是问"如果我们想象数组从q指向的地方开始,指针p指向什么索引?"在这种情况下,答案是5,因为如果我们将q视为数组的基,那么p将位于索引5。在您的例子中,指针ch被设置为等于strstr的返回值,因此它指向s1的中间。表达式ch-s1的意思是"字符串中ch指向的位置">
与空间中的点进行类比:如果你有两个点p和q,你可以把p-q看作一个向量,代表你从q到p所需的方向。不过,你不能有意义地把p和q加起来得到p+q,就像你不能在C.中加两个指针一样