程序猿之---C语言细节5

主要内容:字符串内存分配、合并两个字符串

#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;
}
输出:


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。