Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将strcpy应用于指向数组+;一些偏移量_C_Arrays_Pointers_Language Lawyer - Fatal编程技术网

将strcpy应用于指向数组+;一些偏移量

将strcpy应用于指向数组+;一些偏移量,c,arrays,pointers,language-lawyer,C,Arrays,Pointers,Language Lawyer,这是一个语言问题 strcpy功能的说明见7.24.2.3(p2): strcpy函数复制s2指向的字符串(包括 s1指向的数组中的终止空字符) 考虑下面的代码: char test[8] = "123"; strcpy(test + 3, "4567"); printf("%s\n", test); //1234567 它按预期工作,但我对test+3指向的对象感到困惑。很明显,test指向的对象声明了类型char[8]。但就我所见,标准并没有明确定义这种类型: “如果我们有一个n元素数组,

这是一个语言问题

strcpy
功能的说明见
7.24.2.3(p2)

strcpy
函数复制s2指向的字符串(包括 s1指向的数组中的终止空字符)

考虑下面的代码:

char test[8] = "123";
strcpy(test + 3, "4567");
printf("%s\n", test); //1234567
它按预期工作,但我对
test+3
指向的对象感到困惑。很明显,
test
指向的对象声明了类型
char[8]
。但就我所见,标准并没有明确定义这种类型:

“如果我们有一个
n
元素数组,那么指向
i
th元素的指针可以被视为指向
n-i
元素数组的第一个元素的指针。”


由于函数
strcpy
要求它的第一个操作数是一个数组,我们可以学究般地说,像我上面所说的那样应用指针算法吗?

是的,因为即使函数
strcpy
的语义只在处理数组而不是指针时才有意义,但是
strcpy
(或任何其他函数)来判断它是传递给数组还是传递给数组的指针,因为当数组作为参数传递给函数时,它会衰减为指向其第一个元素的指针。

当然
s1
并不指向数组,它指向的是
字符。

[…]如果函数参数被描述为数组,则实际传递给函数的指针的值应确保所有地址计算和对对象的访问(如果指针确实指向该数组的第一个元素,则该值将是有效的)[…]


对于strcpy(test+3,“4567”);
访问
test[3+0…4]
应该是有效的,如果
test
是一个至少包含8个字符的数组,那么这种实用主义的论点是有意义的,但似乎对[语言律师]的问题没有太大的反应。