gpt4 book ai didi

C 从文件加载文本,打印转义字符

转载 作者:行者123 更新时间:2023-11-30 20:25:36 24 4
gpt4 key购买 nike

我正在将一个文本文件从磁盘加载到我的 C 应用程序。一切正常,但文本包含多个转义字符,例如\r\n ,加载文本后我想保留这些字符的计数并相应地显示。

此时,如果我在字符串上使用 printf,它会显示以下内容:

你好\n伙计\n

有什么快速的方法吗?

最佳答案

似乎没有一个标准函数,但你可以推出自己的函数:

#include <stdlib.h>
#include <stdio.h>

/*
* Converts simple C-style escape sequences. Treats single-letter
* escapes (\t, \n etc.) only. Does not treat \0 and the octal and
* hexadecimal escapes (\033, \x, \u).
*
* Overwrites the string and returns the length of the unescaped
* string.
*/
int unescape(char *str)
{
static const char escape[256] = {
['a'] = '\a', ['b'] = '\b', ['f'] = '\f',
['n'] = '\n', ['r'] = '\r', ['t'] = '\t',
['v'] = '\v', ['\\'] = '\\', ['\''] = '\'',
['"'] = '\"', ['?'] = '\?',
};

char *p = str; /* Pointer to original string */
char *q = str; /* Pointer to new string; q <= p */

while (*p) {
int c = *(unsigned char*) p++;

if (c == '\\') {
c = *(unsigned char*) p++;
if (c == '\0') break;
if (escape[c]) c = escape[c];
}

*q++ = c;
}
*q = '\0';

return q - str;
}

int main()
{
char str[] = "\\\"Hello ->\\t\\\\Man\\\"\\n";

printf("'%s'\n", str);
unescape(str);
printf("'%s'\n", str);

return 0;
}

该函数对字符串进行转义。这样做是安全的,因为未转义的字符串不能比原始字符串长。 (另一方面,这可能不是一个好主意,因为相同的字符缓冲区用于转义和未转义的字符串,并且您必须记住它保存的内容。)

此函数不会将数字序列转换为八进制和十六进制表示法。有more complete implementations周围,​​但它们通常是某些库的一部分,并且依赖于其他模块,通常用于动态字符串。

类似的还有functions for escaping当然是一个字符串。

关于C 从文件加载文本,打印转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28061475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com