微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用数组和指针理解 strcpy

如何解决用数组和指针理解 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 举报,一经查实,本站将立刻删除。