如何解决用数组和指针理解 strcpy
我有一些合并 strcpy
数组和指针的代码。我不明白为什么代码显示 "Good exam"
。我看到在调用 strcpy
之后,ptr
包含 "lexam"
。那么,您能解释一下 a[]
的值何时发生变化吗?
char a[50] = "Good luck!";
char b[50] = { 'i','n',' ','t','h','e','x','a','m','\0' };
char* ptr = a + 5; cout << *ptr;
strcpy(ptr,&b[7]);
for (int i = 0; i < strlen(ptr); i++)
cout << ptr[i];
cout << a;
解决方法
[0][1][2][3][4][5][6][7][8][9][10] [11]
a = [G][o][o][d][ ][l][u][c][k][!][\0]
b = [i][n][ ][t][h][e][ ][e][x][a][m] [\0]
char* ptr = a + 5;
[0][1][2][3][4][5]
ptr = [l][u][c][k][!][\0]
[0][1][2][3][4]
&b[7] = [e][x][a][m][\0]
您所做的是替换以 b[7]
开头的内容并覆盖以 ptr
开头的内容(相当于 a + 5
或 &a[5]
)。
因此在 strcpy 之后你有:
[0][1][2][3][4][5]
ptr = [e][x][a][m][\0][\0]
请注意,符号 !
出现的位置现在是 \0
,因为 &b[7]
的长度为 4,而 ptr
的长度为 5。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。