首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在sprintf中转义

在sprintf中转义
EN

Stack Overflow用户
提问于 2013-03-27 18:57:17
回答 3查看 4K关注 0票数 1

我想从一个文件中读取一个转义序列,该序列是逐字存储的。

在某些情况下,我的调用以ansi-c格式的函数之一结束。

代码语言:javascript
复制
sprintf(target, format, ...);

我的问题在没有args部分的情况下就表现出来了-所以不用担心它的细节。

从文件加载格式字符串并将其存储在缓冲区中。'\\' 'r' '\0' (文件包含'\\' 'r' '\0' )

我希望目标存储"\r",但是我的目标总是像'\\' 'r' '\0'一样结束。

我该如何解决这个问题?

编辑:

来解决我的问题。

文本文件包含三个字符- '\\' 'r' '\0'

这三个字符是读取的,需要像两个字符'\r' '\0'一样进行存储

用户可以自由地更改文件内容,我必须找到一种方法来解释文件中的行,就像我在编辑器中编译前编写的那样。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-27 19:33:14

没有标准的函数可以帮你取消转义,所以你必须自己去做。

代码语言:javascript
复制
void unescape(const char *in, char *out)
{
    int esc = 0;

    while (*in) {

       if (esc) {

          switch(*in) {
           case 'r':
              *out++ = '\r';
              break;
           case 'n':
              *out++ = '\n';
              break;
           default:
              *out++ = '\\';
              *out++ = *in;
              break;
          }

          esc = 0;

        } else if (*in == '\\') {
          esc = 1;
       } else {
          *out++ = *in;
       }

       in++;
   }

 *out = 0;
}

(*注意,'out‘缓冲区必须至少和'in’缓冲区一样大。如果最后一个字符是\,则会丢失)

然后你就会这样做

代码语言:javascript
复制
char input[BUFSZ];
char buf[BUFSZ];

//read data from the file into 'input'

unescape(input, buf);
sprintf(target, buf, ...);
票数 2
EN

Stack Overflow用户

发布于 2013-03-27 19:02:19

double ""\r中生成字符串,而'\r'引用单个字符或转义序列。您可以使用strcat-function并将单个字符附加到您的格式,因为strcat需要const char*。试一试

代码语言:javascript
复制
strcat(format, '\r');

当然,您需要提供足够的内存。

就像奥利·查尔斯沃思提供的那样,拿起你的字符串,

代码语言:javascript
复制
len = strlen(str); str[len] = '\r';
str[len+1] = '\0';

在这种情况下,您正在重写您的字符串。

看,here

票数 2
EN

Stack Overflow用户

发布于 2013-03-27 19:18:15

根据需要解析外部格式并构建(内部)格式,例如:

代码语言:javascript
复制
if ((externalformat[0] == '\\')
      && ((externalformat[1] == 'r')
      && ((externalformat[2] == 0))
{
    strcpy(format, "\r");
}

/* use format */
sprintf(target, format, ...);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15657176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档