我要的效果很简单,这样吧,先把代码上了再提问题吧#include <iostream>#ifndef Test_H
#define Test_Husing namespace std;class Test {
public:
// 构造函数与析构函数~
Test();
Test(char *characters);
~Test();
int fileCopy(char *pathFrom, char *pathTo);
public:
// 数据成员
char m_data[50];
static const int onlyThisType = 3;
};
#endifTest::Test() {
cout << "Test 无参构造函数被调用~" << endl;
}Test::Test(char *characters) {
cout << "Test 带参构造函数被调用~" << endl;
m_data = characters;
}Test::~Test() {
cout << "Test 析构函数被调用~" << endl;
}// 文件复制,将1个文件中所有内容复制到另一个文件中去,如果目标文件不存在返回 0 表示复制失败(则创建出来)~
// 这个方法有问题啊,高手们帮看一下
int Test::fileCopy(char *pathFrom, char *pathTo) {
FILE *pFileFrom;
FILE *pFileTo;
// 如果打开文件失败的话,fopen 函数将返回 NULL,NULL是1个宏,实际值为 0~
if(pFileFrom = fopen(pathFrom, "rt")) {
return 0;
}
if(pFileTo = fopen(pathTo, "at")) {
return 0;
}
// feof() 检测是否已到文件尾,是返回真,否则返回 0
char tempBuffer[2048];
do {
fgets(tempBuffer, 1024, pFileFrom);
fputs(tempBuffer, pFileTo);
} while(!feof(pFileFrom)); fclose(pFileFrom);
fclose(pFileTo);
return 1;
}int main() {
// 错误 1 error C2440: “=”: 无法从“char *”转换为“char [50]”
Test t("asdfasdfasf"); char baseStr[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\";
char sourceStr[] = strcat(baseStr, "source.txt");
char destinationStr[] = strcat(baseStr, "destination.txt"); // 我的想法很简单,前面路径的部分都是一样的,抽出来,然后再和文件名拼起来就行了~
// 但是却不行啊,我又想用string 类型,但是不知道怎么用的
// 还有我用指针接收,竟然两个都成
// F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\source.txtdestination.txt
// 这个了 // 没办法,只有用这种原始的方法来写了,真别扭~
char from[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\from.txt";
char to[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\to.txt"; // 高手能说说么,怎么用字符串拼凑的那种方式??
t.fileCopy(from, to);
return 0;
}
我的问题就在“文件复制”和“构造传参”那块高手能帮看、改下代码么,拜谢!!
#define Test_Husing namespace std;class Test {
public:
// 构造函数与析构函数~
Test();
Test(char *characters);
~Test();
int fileCopy(char *pathFrom, char *pathTo);
public:
// 数据成员
char m_data[50];
static const int onlyThisType = 3;
};
#endifTest::Test() {
cout << "Test 无参构造函数被调用~" << endl;
}Test::Test(char *characters) {
cout << "Test 带参构造函数被调用~" << endl;
m_data = characters;
}Test::~Test() {
cout << "Test 析构函数被调用~" << endl;
}// 文件复制,将1个文件中所有内容复制到另一个文件中去,如果目标文件不存在返回 0 表示复制失败(则创建出来)~
// 这个方法有问题啊,高手们帮看一下
int Test::fileCopy(char *pathFrom, char *pathTo) {
FILE *pFileFrom;
FILE *pFileTo;
// 如果打开文件失败的话,fopen 函数将返回 NULL,NULL是1个宏,实际值为 0~
if(pFileFrom = fopen(pathFrom, "rt")) {
return 0;
}
if(pFileTo = fopen(pathTo, "at")) {
return 0;
}
// feof() 检测是否已到文件尾,是返回真,否则返回 0
char tempBuffer[2048];
do {
fgets(tempBuffer, 1024, pFileFrom);
fputs(tempBuffer, pFileTo);
} while(!feof(pFileFrom)); fclose(pFileFrom);
fclose(pFileTo);
return 1;
}int main() {
// 错误 1 error C2440: “=”: 无法从“char *”转换为“char [50]”
Test t("asdfasdfasf"); char baseStr[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\";
char sourceStr[] = strcat(baseStr, "source.txt");
char destinationStr[] = strcat(baseStr, "destination.txt"); // 我的想法很简单,前面路径的部分都是一样的,抽出来,然后再和文件名拼起来就行了~
// 但是却不行啊,我又想用string 类型,但是不知道怎么用的
// 还有我用指针接收,竟然两个都成
// F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\source.txtdestination.txt
// 这个了 // 没办法,只有用这种原始的方法来写了,真别扭~
char from[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\from.txt";
char to[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\to.txt"; // 高手能说说么,怎么用字符串拼凑的那种方式??
t.fileCopy(from, to);
return 0;
}
我的问题就在“文件复制”和“构造传参”那块高手能帮看、改下代码么,拜谢!!
Test::Test(char *characters) {
cout << "Test 带参构造函数被调用~" << endl;
strcpy(m_data, characters);
}char baseStr[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\";
char sourceStr[MAX_PATH];
char destinationStr[MAX_PATH];
sprintf(sourceStr, "%s%s", baseStr, "source.txt");
sprintf(sourceStr, "%s%s", baseStr, "dst.txt");
对字符串的操作再看看书,你获取的字符串一样是因为两个指针都指向了baseStr
而且我用的是VS2005,据说里面用的是Unicode字符集,不会一个数字、英文字符都占用2个字节把??
期待回复!
char baseStr[] = "……";char sourceStr[MAX_PATH + 1] = {0}
strcpy(sourceStr, baseStr);
strcat(sourceStr, "source.txt");char destinationStr[MAX_PATH + 1] = {0};
strcpy(destinationStr, baseStr);
strcat(destinationStr, "destination.tx");
另外有点儿看不懂啊
char sourceStr[MAX_PATH + 1] = {0} 这样定义有什么好处呢?
我觉得上面那位兄台的貌似显得更加简洁啊?求解
#define MAX_PATH 260char sourceStr[MAX_PATH + 1] = {0} 这样定义有什么好处呢?
-------------------------
初始化操作
#include <windef.h>么,但是我创建的就是一个简单的控制台应用程序啊?
既然那样的话,为何不直接定义这么一个宏呢?
因为我确实再用不到里面的其他内容了啊?
期待高手回复!