嘿伙计,所以我有这个特殊字符的文字,我想要“逃避”特殊字符,以便能够编译我的程序,但我不知道是/: - =特殊字符?我是否也需要逃避它们?这是示例
static const char *postthis="text and spec chars";
以下是我想放入的文字示例
<text:Text
text:text="http://text.text.text/text/text/"
text:text="text:text:text-text-text">
<text:Text>
<text text="http://text.com/text">
<productID>20630175</textID>
</text>
</text:text>
</text:text>
所以我把\之前&lt;并且“但我又得到了错误,我需要逃脱什么以及如何逃避?
static const char *postthis="\<text:Text
text:text=\"http://text.text.text/text/text/\"
text:text=\"text:text:text-text-text\"\>
\<text:Text\>
\<text text="http://text.com/text\"\>
\<textID\>20630175\</textID\>
\</text\>
\</text:text\>
\</text:text\>";
答案 0 :(得分:1)
我认为您需要在多行初始值设定项中跳过行尾 和报价。如果有标签或换行符,你也需要逃避它们\ t \ n。
static const char *postthis="\<text:Text\
text:text=\"http://text.text.text/text/text/\"\n\
text:text=\"text:text:text-text-text\">\n\
<text:Text>\n\
<text text="http://text.com/text\"\>\n\
<textID>20630175</textID>\n\
</text>\n\
</text:text>\n\
</text:text>";
答案 1 :(得分:0)
将文本放入文件并阅读文件时,花费的时间要好得多。手工编辑XML肯定会适得其反。
如果您正在使用iOS项目,则可以使用NSString初始化程序:
- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error
或者如果你正在使用香草C的话
#include <stdio.h>
#define BUFF_SIZE 1024
int main(int argc, char **argv) {
char s[BUFF_SIZE];
FILE *fp = fopen( "file.xml", "r" );
int i = 0;
while ( !feof(fp) && i < BUFF_SIZE-1 ) {
s[i++] = fgetc(fp);
}
s[i]='\0';
printf("My string is here %s\n", s);
}
答案 2 :(得分:0)
您需要在C字符串内转义的唯一字符是\
和"
。没有理由引用<
。换行可以转义,或者你可以将它们包含为\ n(我更喜欢,因为它可以让你更好地缩进IMO)。但是,你不能简单地嵌入不带引号的换行符(这可能是你的主要问题)。
XML支持'
和"
作为引用,因此您几乎可以使用'
简化您的生活。
static const char *postthis=
"<text:Text\n"
" text:text='http://text.text.text/text/text/'\n"
" text:text='text:text:text-text-text'>\n"
" <text:Text>\n"
" <text text='http://text.com/text'>\n"
" <productID>20630175</textID>\n"
" </text>\n"
" </text:text>\n"
"</text:text>";
当然,XML不需要新行,所以你可以放弃它们,除非你想让它成为人类阅读。
请注意,上面使用了多部分C字符串。 (多个“...”连接在一起。)我不记得添加了什么版本的C(或者它是否是GNU扩展)。如果你不能使用它,那么你可以逃避换行:
static const char *postthis=
"<text:Text\
text:text='http://text.text.text/text/text/'\
...
</text:text>";
但它使缩进更难以定制,而不会使您的代码看起来更糟。
答案 3 :(得分:0)
有关字符串文字中的所有转义序列,请参阅http://en.cppreference.com/w/cpp/language/escape。如果您希望它们保持不变,则需要对它们进行转义。您在字符串中需要的任何新行都需要写为\ n。
如前所述,您可以将文本保存在文件中并在运行时读取它。
如果你想要编写很多文本到你的程序中,另一个简单的解决方案是使用objcopy:
objcopy -I binary -O elf64-x86-64 -B i386 --rename-section .data=.rodata,alloc,load,readonly,data,contents your_text.txt your_text.o
这将为您提供一个包含以下符号的目标文件:
_binary_your_text_txt_start
_binary_your_text_txt_end
_binary_your_text_txt_size
链接your_text.o并使用符号访问文本。例如:
#include <stdio.h>
extern char _binary_your_text_txt_start;
extern char _binary_your_text_txt_end;
extern char _binary_your_text_txt_size;
int main(int argc, char *argv[])
{
const char * b = &_binary_your_text_txt_start;
const char * e = &_binary_your_text_txt_end;
size_t s = (size_t)&_binary_your_text_txt_size;
fwrite(b, s, 1, stdout);
return 0;
}