程序猿之---C语言细节5(字符串内存分配、合并两个字符串)
2014-11-03 21:55
369 查看
主要内容:字符串内存分配、合并两个字符串
一、字符串内存分配见程序举例
二、合并两个字符串
见程序举例
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { /* * 字符串操作:内存分配 * 字符串s和t,希望将这两个字符串连接成单个字符串r */ char* s = "abc"; char* t = "def"; // 方法一: 缺点:1、不能确定r指向何处; // 2、同时不知道r所指向的内存空间是否有可容纳字符串的大小,并且是已经先分配的而不是用的是别程序使用的内存 #if 0 char* r; strcpy(r,s); strcat(r,t); printf("%s\n",r); #elseif 0 // 方法二: 缺点:s和t字符串加起来的大小不要超过r大小就能正常工作 char r[100]; // 预先指定了大小 strcpy(r,s); strcat(r,t); printf("%s\n",r); #elseif 0 //方法三: 缺点: 1、malloc函数可能无法提供请求的内存 // 2、r分配的内存在使用完之后要及时释放 // 3、malloc并未分配足够的内存,字符串需要'\0' 结束 char *r; r = malloc(strlen(s) + strlen(r)); strcpy(r,s); strcat(r,t); printf("%s\n",r); #else //方法四: char *r; r = malloc(strlen(s) + strlen(r) + 1); //为字符串'\0'分配内存 if (!r) // 判断是否分配成功 { printf("malloc failed!\n"); exit(1); } strcpy(r,s); strcat(r,t); printf("%s\n",r); free(r); // 释放内存 #endif return 0; }输出:
相关文章推荐
- 程序猿之---C语言细节14(字符串数组内存分配细节‘\0’空字符、字符串数组赋值细节、字符串换行连接和下标)
- 程序猿之---C语言细节17(求time_t的最大值、strlen求的是长度、malloc分配字符内存细节、switch的中default细节)
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- 程序猿之--C语言细节3(i++、 交换两个值得另一种方法、三目运算符处理细节)
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- C语言学习记录 数组分配内存字节和字符串的差别
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- 动态内存分配:如何将两个字符串连接成单个字符串
- 连接两个C风格字符串,重点在内存分配管理上
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- 程序猿之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程可以分配的内存大小)
- c/c++中动态内存分配处理字符串的细节问题
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- 程序猿之---C语言细节7(检测两个整型相加是否溢出)
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- 请编写实现malloc()内存分配函数功能一样的代码。给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。
- 剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序
- 7-13 早上看了一下.net的字符串的内存分配和驻留池