字符串的浅拷贝

xiaoxiao2021-02-28  47

字符串的浅拷贝

先来一道例题ヾ(✿゚▽゚)ノ

#include<stdio.h> int main() { char buf[3]; char *arr[3];//指针数组 int i; for(i=0;i<3;i++) { scanf("%s",buf); arr[i]=buf;//代表数组元素首地址 } for(i=0;i<3;i++) { printf("%s\n",arr[i]); } }

我们输入的值为:“aaa”、“bbbbb”、“cccc”

我们希望的结果是“aaa”、“bbbbb”、“cccc”

然而...运行结果却是...

这是为什么呢o(゚Д゚)っ!

这就引出了字符串的浅拷贝问题啦

来一个图解,大家就比较好理解整个过程啦,最后也会给出正确的拷贝方法,大家也可以先仔细思考一下ヾ(゚∀゚ゞ)

可以发现每一次传进arr中存的都是地址,每一次地址是一样的因为buf只有一个格子,最后一次存的是“cccc”,所以很好理解为什么最后的结果是三次“cccc”了,这就属于字符串的浅拷贝问题了,以下给出修改方法:

应该再申请一个动态内存,去解决此问题

#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char buf[3]; char *arr[3];//指针数组 int i; for(i=0;i<3;i++) { scanf("%s",buf); arr[i]=(char *)malloc(strlen(buf+1)*sizeof(char)); strcpy(arr[i],buf); } for(i=0;i<3;i++) { printf("%s\n",arr[i]); } for(i=0;i<3;i++) { free(arr[i]); } }

运行结果截图:

(红色为修改部分)

这就是这一部分的内容啦❤祝大家都能0 error(s),0 warning(s)ヾ(✿゚▽゚)ノ

转载请注明原文地址: https://www.6miu.com/read-2621607.html

最新回复(0)