vs下内char存分配问题

qq_27887201 2015-05-17 11:06:53
//===================================================================
//程序功能:编写一个strcpy函数
//程序设计思路:先确定strcpy功能,在写
//程序设计语言:c++
//===========================================
#include <iostream>
using namespace std ;

bool Strcpy(const char* str1,char* str2)
{
int i = 0 ;
int iLen = strlen(str1) ;
int j = 0 ;
int jLen = strlen(str2);

if(str1 == NULL || str2 == NULL || iLen > jLen )
{
cout<<"array error!"<<endl;
return false;
}



while(i<iLen)
{
str2[i] = str1[i] ;
i++;
}
str2[i] = '\n' ;
return true ;
}

int main(void)
{
int res = 0 ;
char str1[] = "abcsdsfsfdds" ;
int iLen = strlen(str1) ;
cout<<"原串的长度:"<<iLen<<endl;
char* str2 = nullptr ;

// str2 = new char [ iLen+1 ] ;
//为什么这里分配的内存空间是iLen的倍数,或者更多啊?????????????
str2 = (char*) malloc(iLen);
//如果vs下char占用两个字节,那么下面的应该是 2*iLen+2,但是结果不是呀。。。
str2 = (char*) malloc(iLen+1);
memset(str2,-1,strlen(str2) );
cout<<"模式串的长度"<<strlen(str2)<<endl;
if(str2 == NULL )
{
cout<<"new error!"<<endl;
return -1;
}

Strcpy(str1,str2);

cout<<"源串:"<<str1<<"串的长度为:"<<strlen(str1)<<endl;
cout<<"复制后:"<<str2<<"串的长度为:"<<strlen(str2)<<endl;

system("pause");
return res ;

}
这里有问题
...全文
48 点赞 收藏 2
写回复
2 条回复
qq_27887201 2015年05月18日
引用 1 楼 zhangxiangDavaid 的回复:
[/code]
谢谢,没注意到这个问题
回复 点赞
苏叔叔 2015年05月17日
修改如下:

//程序功能:编写一个strcpy函数
//程序设计思路:先确定strcpy功能,在写
//程序设计语言:c++
//===========================================
#include <iostream>
using namespace std;
bool Strcpy(const char* str1, char* str2)
{
	int i = 0;
	int iLen = strlen(str1);
	int j = 0;
	int jLen = strlen(str2);

	if (str1 == NULL || str2 == NULL || iLen > jLen)
	{
		cout << "array error!" << endl;
		return false;
	}
	while (i < iLen)
	{
		str2[i] = str1[i];
		i++;
	}
	//str2[i] = '\n';
	str2[i] = '\0';
	return true;
}
int main(void)
{
	int res = 0;
	char str1[] = "abcsdsfsfdds";
	int iLen = strlen(str1);
	cout << "原串的长度:" << iLen << endl;
	char* str2 = nullptr;

	//	str2 = new char [ iLen+1 ] ;
	//为什么这里分配的内存空间是iLen的倍数,或者更多啊?????????????
	//str2 = (char*)malloc(iLen);
	//如果vs下char占用两个字节,那么下面的应该是 2*iLen+2,但是结果不是呀。。。
	str2 = (char*)malloc(iLen + 1);  //你从哪里知道vs下char占用两个字节?
	memset(str2, -1, strlen(str2));
	str2[iLen] = 0;
	cout << "模式串的长度" << strlen(str2) << endl;
	if (str2 == NULL)
	{
		cout << "new error!" << endl;
		return -1;
	}
	Strcpy(str1, str2);
	cout << "源串:" << str1 << "串的长度为:" << strlen(str1) << endl;
	cout << "复制后:" << str2 << "串的长度为:" << strlen(str2) << endl;
	system("pause");
	return res;
}
//原串的长度:12
//模式串的长度12
//源串:abcsdsfsfdds串的长度为:12
//复制后:abcsdsfsfdds串的长度为:12
//请按任意键继续. . .
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告