sLineContent.TrimRight();
sLineContent=sLineContent.Right(1);
if (sLineContent) //<-----------------------
{
ofile <<sLineContent<<"\n";
}
sLineContent=sLineContent.Right(1);
if (sLineContent) //<-----------------------
{
ofile <<sLineContent<<"\n";
}
cmoth (容量够大) 的错误在于哪里是一目了然了的!
#include <iostream.h>void main()
{
CString s("jgkghkhk ");
s.TrimRight (" ");
cout <<s<<endl;
cout <<s.Right(1)<<endl;
if (s.Right (1)!="k")
cout <<"gkhkhk"<<endl;
}以上s.Right(1)返回的指就是对的,另外我是要删除行结尾是;号的行,你改的好像并不是我要求的,请帮忙再看看。主要是什么原因会导致Right出错?
if (sLineContent.Right(1)!=";")
请大家再看看
你刚才贴的例字当然是正确的
s.Right (1)!="k" 这是判断的返回值而非s本身Right操作并不修改本身,只是返回一个字符串而已
对啊!但为什么在最上的那个程序里
if (sLineContent.Right(1)!=";")
语句sLineContent.Right(1)返回值就不对呢?哎.........yum
#include <iostream.h>
#include <fstream.h>void main(int argc,char *argv[])
{
CString sLineContent;
CString sss;
TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];
if (argc==2)
{
strcpy(szPathOrig,argv[1]);
ofstream ofile(szPathOrig,ios::app);
GetTempPath(_MAX_PATH, szPathClone);
GetTempFileName(szPathClone, __TEXT("gzz"), 0, szPathClone);
if (0==CopyFile(szPathOrig, szPathClone, FALSE))
return;
ifstream tempfile(szPathClone);
while (0==tempfile.eof())
{
tempfile.getline ((LPSTR)(LPCTSTR)sLineContent,_MAX_PATH);
sLineContent.TrimRight(" "); cout <<"sLineContent:\"" <<sLineContent<<"\""<<endl;
cout <<"sLineContent.Right(1):\"" <<sLineContent.Right(1)<<"\""<<endl;
if (sLineContent.Right(1)!=";")
{
ofile <<sLineContent<<"\n";
}
}
}
}
可以试试这段程序,结果就是不对啊!
if(sLineContentRight(1)!=_T(";")
{
....
....
}
if(sLineContentRight(1)!=_T(";"))
{
...
}
改成
char buf[1024];
tempfile.getline (buf,1024);
sLineContent = buf;
即可象tempfile.getline ((LPSTR)(LPCTSTR)sLineContent,_MAX_PATH);
这样的用法根本就是错误的,你跟进源码看看就明白了