从C中的文本文件中读取\n作为真正的换行符
我正在尝试用C来读取文本文件。文本文件是一个简单的语言文件,它在嵌入式设备中工作,文件的每一行在代码端都有一个枚举。以下是我的文件的一个简单部分: 文本文件中的示例:从C中的文本文件中读取\n作为真正的换行符,c,fgets,getline,C,Fgets,Getline,我正在尝试用C来读取文本文件。文本文件是一个简单的语言文件,它在嵌入式设备中工作,文件的每一行在代码端都有一个枚举。以下是我的文件的一个简单部分: 文本文件中的示例: OPERATION SUCCESS! OPERATION FAILED!\nRETRY COUNT : %d 枚举: typedef enum { ... MESSAGE_VALID_OP, MESSAGE_INVALID_OP_WITH_RETRY_COUNT
OPERATION SUCCESS!
OPERATION FAILED!\nRETRY COUNT : %d
枚举:
typedef enum
{
...
MESSAGE_VALID_OP,
MESSAGE_INVALID_OP_WITH_RETRY_COUNT
...
}
加载字符串:
typedef struct
{
char *str;
} Message;
int iTotalMessageCount = 1012;
void vLoadLanguageStrings()
{
FILE *xStringList;
char * tmp_line_message[256];
size_t len = 0;
ssize_t read;
int message_index = 0;
xStringList = fopen("/home/change/strings.bin", "r");
if (xStringList == NULL)
exit(EXIT_FAILURE);
mMessages = (Message *) malloc(iTotalMessageCount * sizeof(Message));
while ((read = fgets(tmp_line_message, 256, xStringList)) != -1 && message_index < iTotalMessageCount)
{
mMessages[message_index].str = (char *) malloc(strlen(tmp_line_message));
memcpy(mMessages[message_index].str, tmp_line_message, strlen(tmp_line_message) -1);
message_index++;
}
fclose(xStringList);
}
typedef结构
{
char*str;
}信息;
int iTotalMessageCount=1012;
void vLoadLanguageString()
{
文件*xStringList;
字符*tmp_行_消息[256];
尺寸长度=0;
阅读;
int message_index=0;
xStringList=fopen(“/home/change/strings.bin”,“r”);
if(xStringList==NULL)
退出(退出失败);
mMessages=(Message*)malloc(iTotalMessageCount*sizeof(Message));
while((read=fgets(tmp_line_message,256,xStringList))!=-1&&message_index
在文本文件的示例中,我必须在一些行中使用\n换行符。毕竟,我成功地阅读了这个文件。但如果我试图调用包含提要行\n的文本,则提要行字符将作为\&n字符打印在设备屏幕上
我已经尝试了getline(…)
方法。如何处理\n字符而不增加复杂性并逐行读取文件
当您从文本文件中提取样本时,我必须使用\n提要行
我的一些台词中有一个字符
不,我看不出来。或者至少,我没看到你这么做。双字符序列\n
主要对C编译器有重要意义;它在数据文件中没有固有的特殊意义,无论这些文件是否被C程序使用
实际上,如果系统将换行符识别为换行符,那么根据定义,不可能在物理行中嵌入文字换行符。看起来您试图做的是将换行符编码为“\n”字符序列。这很好,但它与嵌入换行字符本身完全不同
但毕竟,我成功地阅读了这个文件。
但是如果我尝试调用包含提要行的文本\n,提要行
刚刚在设备屏幕上打印的字符为\&n个字符
当然。这些是你读入的字符(不是换行符),所以如果你把它们写出来,你就可以复制它们。如果您是通过该字符序列对换行符进行编码,那么您的程序必须对该序列进行解码,如果您希望它在原处输出文字换行符
我已经尝试了getline(…)方法。如何处理\n字符
不增加复杂性,逐行读取文件
您需要处理读取的每一行以解码其中的\n序列。我将为此编写一个函数。但是,无论如何,您的程序都会更加复杂,因为当前版本并不能完成所有需要完成的操作。首先,函数fgets返回一个指针,而不是一个数值!这不是问题所在。我已经尝试了很多东西,这是getline方法的回归。不要认为…请关注主要问题…我的意思是如果我尝试使用“操作失败\nRETRY COUNT:%d'对于在我的屏幕上显示消息…在C语言中,出现在代码中的字符串文本中的
\n
序列被编译器解释为单个字符,即换行符。当您使用getline
或fgets
从文件中将其作为字符串读取时,它将被读取为两个字符,\n和n
。您可能需要对阅读的每一行进行后期处理以翻译序列。函数:fgets()
返回一个char*
而不是任何数字,包括not-1。因此,代码基本上是错误的,建议阅读并理解所用系统功能的手册页。注:read
是一个众所周知的系统函数名。语句:while((read=fgets(tmp\u line\u message,256,xStringList))!=-1&&message\u index
最好写成:while(fgets(tmp\u line\u message,256,xStringList)&&message\u index
,在阅读另一行之前,应该检查消息\u索引
。因此我已经觉得没有办法直接从文本文件中使用。必须为每一行使用类似decodeFeedLines的函数。谢谢你的回答