我必须将程序从UNIX迁移到Windows。该程序是关于从串口获取数据的。在正在接收它原来的UNIX机器,它的内容:fgets()读取什么?
char my_buffer_a[200];
memset(my_buffer_a, '\0', sizeof(my_buffer_a));
if (fgets(my_buffer_a, sizeof(my_buffer_a), file_p))
{
n = sscanf("%d\t%d\t...%d\n0x0A",
my_record.field1, my_record.field2, ...)
....
}
我知道,与fgets()将读取直到EOF或换行符。这意味着在my_buffer_a中,我期待最后的'\ n'。但令我惊奇的是,还有也0x0A! (这是否意味着两个换行符?)这是怎么回事?
我担心的另一件事是Unix和Windows中换行符的定义。它们在Unix和Windows中都不一样。我的意思是我转换后,当我做sscanf
,我将不得不做sscanf("%d\t%d\t...%d\r\n
(或sscanf(%d\t%d\t...%d\r0x0D\n0x0A
,同时保持这种奇怪的逻辑)?
你真的不知道'0x0a'是''\ n''的ASCII编码('0x0d'是'\ r''的编码)吗?而Windows使用'\ r \ n'作为文本文件行结尾,而Unix只使用'\ n''?你真的可以不知道文字基础? – DevSolar
是的我已经检查过0x0A和0x0D是什么意思。正如我在代码中所述(由其他人写的),'sscanf'以'\ n0X0A'结尾。这意味着在原来的UNIX程序中有两个***换行符。这是否意味着fgets()需要两个换行符? – user3454439
以十六进制打印输入字符串,并检查您的假设。经验法则:标准功能不会中断。标准功能的文档没有被破坏。 – DevSolar