2010-10-07 30 views
0

C中的转义序列是什么?换句话说,我怎么能问一个while语句来搜索“““C中的转义序列?

+0

为了澄清:给定一个'字符*'你想停下来,当你发现一个双引号? – 2010-10-07 03:49:45

回答

11

在一个字符常量,你不需要逃避"字符的次数;你可以简单地使用'"'

在一个字符串,你需要躲避"字符,因为它是分隔符,你这样做是通过用一个反斜杠("\"")前缀它

注意,您可以逃脱字符常量的"字符(。 '\"');这是没有必要的

+0

你也可以用'\ x22'代替'\“'在字符串中搜索双引号 – Zabba 2010-10-07 03:59:23

+0

@Zabba:如果我在代码审查中看到'\ x22',我几乎肯定会考虑它[一个主要代码WTF](http://28.media.tumblr.com/tumblr_kpu8502s7I1qa3ti5o1_400.jpg)。 – 2010-10-07 04:02:34

+6

当然 - 你应该把它写成\ 042 – 2010-10-07 04:15:37

1

想要查找的"\""

0

该字符'"',ASCII码为34. "In a string literal you escape it like \" this"

1

使用strchr()string.h

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
     char str[] = "This is a sample string with \" another \""; 
     char * pch; 
     printf ("Looking for the '\"' character in: %s ...\n",str); 
     pch=strchr(str,'"'); 
     while (pch!=NULL) 
     { 
      printf ("found at %d\n",pch-str+1); 
      pch=strchr(pch+1,'\"'); 
     } 
     return 0; 
} 
+1

你真的不需要为此使用string.h。 while(* pch ++!='''&& * pch);'将'pch'移动到双引号的第一个位置或直到字符串结尾。 – 2010-10-07 03:56:16

+2

但是由于能够一次搜索整个单词(或整个16个字节的块,使用sse等),'strchr'可能会比大字符串快几倍。 – 2010-10-07 04:05:23

+0

另一方面,如果找不到字符,'strchr'会丢失关于字符串长度的信息,所以如果需要它,您必须浪费'O(n)'调用'strlen'来再次找到它。另一种选择是'strcspn',但它可能不会针对单个字符集的情况进行优化。 – 2010-10-07 04:07:10