Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
204 views
in Technique[技术] by (71.8m points)

c++ - Understanding strcpy with array and pointer

I have a little code that merge strcpy array and pointer. I don't understand why the code displays "Good exam". I see that after the call to strcpy, ptr contains "lexam". So, can you explain when the value of a[] changes?

char a[50] = "Good luck!";
char b[50] = { 'i','n',' ', 't','h','e',' ','e','x','a','m','' };
char* ptr = a + 5; cout << *ptr;
strcpy(ptr, &b[7]); 
for (int i = 0; i < strlen(ptr); i++)
    cout << ptr[i];
cout << a;
question from:https://stackoverflow.com/questions/65864443/understanding-strcpy-with-array-and-pointer

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
    [0][1][2][3][4][5][6][7][8][9][10] [11]
a = [G][o][o][d][ ][l][u][c][k][!][]
b = [i][n][ ][t][h][e][ ][e][x][a][m]  []

char* ptr = a + 5;

      [0][1][2][3][4][5]
ptr = [l][u][c][k][!][]

        [0][1][2][3][4] 
&b[7] = [e][x][a][m][]

What you are doing is replacing the content that starts in b[7]and overwriting whatever starts in ptr (that is equivalent to a + 5 or &a[5]).

Hence after strcpy you have:

      [0][1][2][3][4][5]
ptr = [e][x][a][m][][]

Note that the place where the symbol ! was present is now a because &b[7] had length 4 while ptr had length 5.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...