为什么写功能不正常?

时间:2014-06-06 11:03:06

标签: c++ file char

我写了这段代码。在这个程序中,我读取一个文件,然后将部分文件倒入char * temp。最后char * temp写在文件中。我有问题。 当我在文件中写入temp时,只写了4个字符。我该怎么办?

fstream file;
 file.open("mary.txt",ios::in);
 file.seekg(-1,ios::end);
 int pos=file.tellg();
 char ch;
 char c;
 int i=0;
 char * temp=new char[100];
 file.seekg(0,ios::beg);
 while(pos >=0)
 {

     file.read(&ch,sizeof(char));
     if(ch=='a'||ch=='o'||ch=='u'||ch=='e'||ch=='i'||ch=='A'||ch=='O'||ch=='U'||ch=='E'||ch=='I')
     {
         pos--;
         continue;
     }
     else if(ch>='a' && ch<='z')
     {
         c=ch-32;
         temp[i]=c;
         i++;
     }
     else
     {
         temp[i]=ch;
         i++;
     }
     pos--;
 }
 temp[i]=NULL;
 cout<<temp<<endl;
 cout<<" sizeof temp:"<<sizeof(temp)<<endl;//out put is 4 while temp has longer size!! why?
 fstream f("test.txt",ios::trunc);
 f.write(temp,sizeof(temp));//if the file contains "abcdeifjle" only written "abcd"

2 个答案:

答案 0 :(得分:3)

temp是一个指针; sizeof(temp)是指针的大小,在32位平台上是4个字节。

要获得它指向的C风格字符串的长度,请使用std::strlen(temp)

更好的是,使用std::string而不是所有这些奇怪的指针 - 玩杂耍。这将修复代码中的内存泄漏和缓冲区溢出漏洞;也可能是一些不太明显的错误。编写C ++很少有理由像C一样。

答案 1 :(得分:0)

您可以使用strlen(temp)

sizeof(temp)

会给你指针的大小

指针通常具有固定的大小,例如。在32位可执行文件上,它们通常是32位的。有一些例外,比如旧的16位窗口,当你不得不区分32位指针和16位......通常可以非常安全地假设它们在现代桌面操作系统的给定可执行文件中是统一的