问题描述
我有一些合并 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。