void CTryDlg::Change(char* b)
{
ofstream out;
out.open("a.txt");
out<<setw(12)<<bltoa(2);
out<<setw(12)<<bltoa(4);
out.close();
}char * CTryDlg::bltoa(int k)
{
     static char buffer[60]={"abcdefg"}; 
     buffer[k]='a';
     return buffer;
}则文件中输出正确值     abadefg     abadafg
如果用out<<setw(12)<<bltoa(2)<<setw(12)<<bltoa(4);代替上面的输出,也就是写到一行。 则输出值为     abadafg     abadafg
e被修改了成了a,好像是两步都作了计算?为什么?怎样可以避免?谢谢!

解决方案 »

  1.   

    因为几次调用 bltoa 都是修改同一个静态字符串 static char buffer[60]
    out<<bltoa(2)<<bltoa(4); 相当于char *p1 = bltoa(2); // p1 == buffer
    char *p2 = bltoa(4); // p2 == buffer == p1 
    out << p1 << p2;最好改变函数的设计,使其修改传入的字符串:char * CTryDlg::bltoa(char * buffer, int k)
    {
         strcpy(buffer, "abcdefg"); 
         buffer[k] = 'a';
         return buffer;
    }char buffer1[60], buffer2[60];
    out << bltoa(buffer1, 2) << bltoa(buffer2, 4);