2014-02-23 31 views
-2

嘿傢伙,所以我有這個特殊字符的文本,我想「逃離」特殊字符能夠編譯我的程序,但我不知道是/: - =特殊字符?我還需要逃避它們嗎?下面是例子c中有什麼特別的字符?

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> 

所以我把\ <前「,但再次我有錯誤,我需要什麼逃脫,怎麼樣?

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

C「simple-escape-sequence」:\'\「\?\\ \ a \ b \ f \ n \ r \ t \ v – chux

回答

0

我覺得行香草Ç東西您需要在多行初始化程序 和引號中跳過該行的結尾。如果有標籤或換行符,您需要將這些標籤或標籤越過\ 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>"; 
0

您的時間更好花費將文本中的文件和讀取。手工編輯XML是保證事與願違。

如果你是一個工作在iOS項目你可以使用NSString的初始化器:

- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error 

或者,如果您使用的是沿

#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); 

} 
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>"; 

但它使壓痕有點困難,而不使您的代碼定製看起來更糟。

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; 
} 
相關問題