c语言的,strcpy里有表达式 是先算表达式后覆盖吗?


int n;char[20]=" 123456";
strcpy(ch+4, "123456");
n = strlen(ch);

为什么n的值是10?还有ch+4字符串+数字到底是什么意思?

我想你的具体代码应该是下面这个

int n;
char ch[20]=" 123456";
strcpy(ch+4, "123456");
n = strlen(ch);
  1. ch+4字符串+数字到底是什么意思?
    ch是数组名,表示数组首元素的地址,ch+1表示数组下标为1的地址,ch+4表示数组下标为4的地址,这里有一篇初始指针应该能更好的解决这个问题。
  2. strcpy里有表达式 是先算表达式后覆盖吗?
    是的,strcpy是一个函数,括号内的为其参数,传过去的是一个完整的值,函数接收后,才会去实现函数的功能。
  3. 为什么n的值是10?
    首先,strcpy是一个拷贝函数,将字符串"123456"拷贝到ch+4,也就是数组下标为4的地址处,原数组的数据为" 123456",数组下标为4的值为4,将字符串拷贝到该位置,最终结果为" 123123456",共十个字符。
    最后,strlen是用来计算字符串长度的,一个字符串的最后一个字符是为'/0',只要我们定义了字符串编译器会默认加上'/0',strlen在统计字符个数时不会加上'/0',所以最终结果有十个字符,具体可以看sizeof和strlen这篇博客。

有什么地方有问题可以指出。