我正在尝试用C语言阅读文本文件。文本文件是一个简单的语言文件,可以在嵌入式设备中使用,每个行的文件在代码上有 ENUM 侧。这是我文件的一个简单部分:
来自文本文件的样本:
OPERATION SUCCESS!
OPERATION FAILED!\nRETRY COUNT : %d
ENUM:
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);
}
当您从文本文件中选择示例时,我必须在某些行上使用 \ n Feed Line字符。毕竟,我成功地阅读了文件。但是,如果我尝试调用我的带有送纸线的文字\ n,那么只需将设备屏幕上的送纸线字符打印为\&amp; n个字符。
我已尝试使用getline(...)
方法。如何在不增加复杂性的情况下处理\ n字符并逐行读取文件。
答案 0 :(得分:2)
当你从文本文件中取样时,我必须使用\ n Feed Line 我的一些人物上的角色。
不,我不明白。或者至少,我没有看到你做那个。双字符序列\n
主要用于C 编译器;它在数据文件中没有固有的特殊意义,无论这些文件是否被C程序使用。
实际上,如果系统将换行符识别为行终止符,那么根据定义,不可能在物理行中嵌入文字换行符。您尝试做的是将编码换行符作为&#34; \ n&#34;字符序列。这很好,但与嵌入换行符本身完全不同。
但毕竟我成功地阅读了文件。 但是,如果我尝试调用我的文本,该文本有feed line \ n,feed line 字符只是在设备屏幕上打印为\&amp; n个字符。
当然。这些是你读过的字符(不是换行符),所以如果你把它们写回去,那么你就可以重现它们。如果您是通过该字符序列对换行符进行编码,那么您的程序必须 de 编码该序列,如果您希望它在其位置输出文字换行符。
我已经尝试使用getline(...)方法了。我怎么能处理\ n字符 没有提高复杂性并逐行读取文件。
您需要处理每行读取以解码其中的\ n序列。我会为此编写一个函数。但是,无论如何,你的程序会更复杂,因为当前的版本根本无法完成它需要做的所有事情。