点击(此处)折叠或打开
- #include <stdio.h>
- #include <string.h>
-
- int main(void)
- {
- char *dest = NULL;
- char *src = "World";
-
- strcat(dest, src);
- printf("dest:[%s]", dest);
-
- return 0;
- }
- ~
得到的结果却是: Segmentation fault (core dumped)竟然是段错误,为什么呢?
很显然 strcat函数在将src的内容拷贝到dest中是没问题的,但是dest没有足够的空间来存储src中的内容;
修改之后的:
点击(此处)折叠或打开
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main(void)
- {
- char *dest = NULL;
- dest = (char *)malloc(1024);
- char *src = "World";
-
- strcat(dest, src);
- printf("dest:[%s]", dest);
-
- return 0;
- }
- ~
得到的结果为: dest:[World]
方案三:第一个是数组,第二个位指针
点击(此处)折叠或打开
- #include <stdio.h>
- #include <string.h>
-
- int main(void)
- {
- char dest[6] = "Hello";
- char *src = "World";
-
- strcat(dest, src);
- printf("dest:[%s]\n", dest);
-
- return 0;
- }
很明显,这属于数组越界的问题,在C语言中 ,c不检查也不提示,所以这里的拷贝用到了dest[6]后面紧挨着的几个存储单元;
方案四:第一个指针,第二个数组
看到这里,都会知道肯定是dest的空间不足,无法拷贝src中的内容;
所以输出结果是:Segmentation fault (core dumped)
更改之后:
OK输出结果是:dest:[World]
点击(此处)折叠或打开
- #include <stdio.h>
- #include <string.h>
-
- int main(void)
- {
- char *dest;
- char src[] = "World";
-
- strcat(dest, src);
- printf("dest:[%s]\n", dest);
-
- return 0;
- }
所以输出结果是:Segmentation fault (core dumped)
更改之后:
点击(此处)折叠或打开
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main(void)
- {
- char *dest;
- dest = (char *)malloc(1024);
- char src[] = "World";
-
- strcat(dest, src);
- printf("dest:[%s]\n", dest);
-
- return 0;
- }
O(∩_∩)O哈哈哈~想必这下这个函数不会再出类似的错误了吧