我试图读取C.文本文件中的文本文件是一种简单的语言文件,它工作在嵌入式设备和每行的文件有一个ENUM在代码方面。这是我的文件的一个简单部分:
来自文本文件的示例:
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);
}
正如您在文本文件中的示例中看到的那样,我必须在某些行上使用\n馈送行字符。毕竟,我成功读取了文件。但是,如果我尝试调用具有馈送行 \n 的文本,则馈送行字符只是在设备屏幕上打印为 \ & n 字符。
我已经尝试了getline(...)
方法。如何在不增加复杂性的情况下处理 \n 字符并逐行读取文件。
正如您在文本文件中的示例中看到的那样,我必须在某些行上使用 \n 馈送行字符。
不,我不这么认为。或者至少,我没有看到你这样做。两个字符的序列\n
主要对 C编译器很重要;它在数据文件中没有固有的特殊意义,无论这些文件是否被 C 程序使用。
事实上,如果系统将换行识别为换行符,那么根据定义,不可能在物理行中嵌入文字换行。看起来您正在尝试做的是将换行符编码为“\n”字符序列。这很好,但这与嵌入换行符本身完全不同。
但毕竟,我成功读取了文件。但是,如果我尝试调用具有馈送行 \n 的文本,则馈送行字符只是在设备屏幕上打印为 \ & n 字符。
当然。这些是您读入的字符(不是换行符),因此如果您将它们写回,那么您就可以复制它们。如果您已经通过字符序列编码换行符,那么你的程序必须去,如果你想让它在它的位置输出字面换行符代码序列。
我已经尝试使用 getline(...) 方法。如何在不增加复杂性的情况下处理 \n 字符并逐行读取文件。
您需要处理读取的每一行以解码其中的 \n 序列。我会为此编写一个函数。但是,无论如何,您的程序都会更加复杂,因为当前版本根本无法完成它需要做的所有事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句