目前遇到一个项目,需要将换行的字符串写到一个.dat文件当中,但是当重这个文件读取内容之后,再在CStatic当中显示时,却无法实现换行功能。代码如下:111.dat文件如下:[keyname]
key = "123\n\n1234"程序文件如下:CString str;GetPrivateProfileStringA("keyname","key","0",str.GetBuffer(50),50,"111.dat");
结果:读到的内容是
str = “123\n\n1234”CStatic *P;
p = (CStatic *)GetDlgItem(IDC_STATIC1);p->SetWindowsText(str);
发现没有换行,而是直接显示了123\n\n1234我希望的是换行,有没有办法呀,请教高手!

解决方案 »

  1.   

    “123\n\n1234”看下读取的字符串中"\n\n"是2个字符,还是4个字符,如果是4个可能写入时有问题
    "\n\n"一般是不能直接显示的, 显示为乱码
      

  2.   

    如果我直接写一个字符串,如下:CString str str = "123\n\n1214";这个时候,再在CStatic上显示,此时就可以显示为换行了。为什么从字符串当中读出来的,却没有办法换行哪?
      

  3.   

    试试key = "123\\n\\n1234"
      

  4.   

    用="\r\n";CString line="\r\n";
    CString F1="123";
    CString F2="456";
    CFile file;
    file.Write(F1,F1.GetLength());
    file.Write(line,line.GetLength());//这就是换行;
    file.Write(F2,F2.GetLength());
      

  5.   

    用“\n”表示换行符是C语言语法中用来书写常量字符串的写法,也就是说,你在源代码中书写一个“\n”,编译器编译的时候自动把它替换成一个换行符。现在你的程序从文件里读出一个“\n”,那本身就是“\n”了,跟换行符没有任何关系。对此,你所能做的是:模仿编译器,用代码把这个“\n”替换成一个换行符,像这样:
    str.Replace(_T("\\n"), _T("\n"));
      

  6.   

    读入换行,有很多种方法,最笨的一种通过计算字节数将文件指针移动到下一行的位置,这种方法需要你知道当前行的数据大小。我一般都用CStdioFile 这个类通过读取字符串的方法自动换行。CStdioFile mF;
    CString temp_str_1;
    CString temp_str_2;
    mF.Open("你的文件路径",CFile::modeRead);
    mF.ReadString(temp_str_1);
    mF.ReadString(temp_str_2);temp_str_1存的就是第一行的字符串;
    temp_str_2存的就是第二行的字符串;
      

  7.   

    GetPrivateProfileStringA读取出来的字符串保存到str中的\n\n字符了,不是换行符了,lz可以str的内容写入文件,然后看看16进制是不是和"\n\n"一样,如果是直接写 “\n\n"应该会被转成回车换行0D,0A了
      

  8.   

    结贴,同意xxd_qd的观点。谢谢!
      

  9.   

    wsprintf(str, str); 可把\n变成回车。