请问char型数组字符串含有"\n"换行符的话,显示时为什么不能自动换行?

ryrx 2008-09-19 09:17:05
char PrintText[256];
值为“1234567\n以上数字请确认”,其中
PrintText[7]="\"
PrintText[8]="n"
将PrintText[256]显示在messagebox上时,仍然为“1234567\n以上数字请确认”,没有自动换行
请问如何解决?
(ps:用CString的话比较简单,但是因为某种原因目前不能用CString,这样的前提下有办法没有呢?)
...全文
2396 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryrx 2008-09-19
  • 打赏
  • 举报
回复
来人救命啊!
ryrx 2008-09-19
  • 打赏
  • 举报
回复
不知道用什么了,弹出信息框,只能是messagebox吧
kakashi0309 2008-09-19
  • 打赏
  • 举报
回复
别用MessageBox

换个另外的方式试试
ryrx 2008-09-19
  • 打赏
  • 举报
回复
up
ryrx 2008-09-19
  • 打赏
  • 举报
回复
原程序如下:
char PrintText[256];
GetPrivateProfileString("abc", "123", NULL, PrintText, 256, "\\testWord.ini");

GetPrivateProfileString()函数读取外部ini文件,并将指定项的值读进数组PrintText中,是个系统函数
读取后,我watch这个PrintText数组,就发现:
PrintText[7]="\"
PrintText[8]="n"
不知道哪里错了啊?
wtfelse 2008-09-19
  • 打赏
  • 举报
回复
意思就是说你在给PrintText[256]赋值的时候就错了
ryrx 2008-09-19
  • 打赏
  • 举报
回复
就是说我不是一个元素一个元素赋值的,而是用函数直接读取一起放入PrintText这个数组的,用debug中的中断功能调试程序时,watch这个数组,显示为
PrintText[7]="\"
PrintText[8]="n"
这个是怎么回事呢?
lsldd 2008-09-19
  • 打赏
  • 举报
回复
如果是windows编程请使用"\r\n"
回车换行
ryrx 2008-09-19
  • 打赏
  • 举报
回复
PrintText[7]="\"
PrintText[8]="n"
是我debug程序的时候,watch这个数组时看到的呀,不是我主动这样写的啊!
wtfelse 2008-09-19
  • 打赏
  • 举报
回复
换行符"\n"占一个字节,你写出这样
PrintText[7]="\"
PrintText[8]="n"
就不是换行符了
wutaihua 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ToperRay 的回复:]
PrintText[7]='\n'
[/Quote]


楼上两位都是对的,'\n'是一个字符的,它就是个换行符
\是转义字符。可以对n进行转义,\n 就是换行 '\t' 就是tab,'\\'实际就是我们理解上的\
greatws 2008-09-19
  • 打赏
  • 举报
回复
转义字符
ToperRay 2008-09-19
  • 打赏
  • 举报
回复
PrintText[7]='\n'
ToperRay 2008-09-19
  • 打赏
  • 举报
回复
PrintText[7]="\"
PrintText[8]="n"

\n是一个字符,写错了这里
ryrx 2008-09-19
  • 打赏
  • 举报
回复
多谢解惑,明白了不少。散分咯!
w_anthony 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ryrx 的回复:]
原程序如下:
char PrintText[256];
GetPrivateProfileString("abc", "123", NULL, PrintText, 256, "\\testWord.ini");

GetPrivateProfileString()函数读取外部ini文件,并将指定项的值读进数组PrintText中,是个系统函数
读取后,我watch这个PrintText数组,就发现:
PrintText[7]="\"
PrintText[8]="n"
不知道哪里错了啊?
[/Quote]

你写在ini里面写\n与在编译器里面写\n是不同的概念,ini会忠实的保留你输入的字符,但编译器会把你的\n转译成0xa即换行符。
如果你既想换行显示又想把东西写在ini里面,你就必须自己去做编译器所作的事,查找"\\n"(\\会被转译为\),并替换为"\n",当然最好是"\r\n"。
你可以试试,写一下PrintText[7] = '\r', PrintText[8] = '\n'作测试,这时你会发现换行了。
ryrx 2008-09-19
  • 打赏
  • 举报
回复
谢谢cnzdqs的提醒:
最后用了一个for循环,逐个检查PrintText数组元素,发现值等于“\”的,(例如索引为i),就重新赋值为:
PrintText[i]="\r";
紧接着下一个(索引i+1)值为“n”的,也重新赋值为:
PrintText[i+1]="\n";
这样终于搞定了。

这个方法很无奈,但的确解决了问题。
如果有更好的方法,请达人明示。
wltg2001 2008-09-19
  • 打赏
  • 举报
回复
“1234567\n以上数字请确认”,
======================
“1234567\\n以上数字请确认”,
cnzdgs 2008-09-19
  • 打赏
  • 举报
回复
PrintText[7]="\r";
PrintText[8]="\n";

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧