2014-02-24 203 views
0

我试图搜索在字符数组的字符串,由此被识别的字符串是尤卡斯特和由此字符阵列如下:搜索字符数组串

analysis_buffer[0] = \n; 
analysis_buffer[1] = U; 
analysis_buffer[2] = C; 
analysis_buffer[3] = A; 
analysis_buffer[4] = S; 
analysis_buffer[5] = T; 
analysis_buffer[6] = \r; 

我执行的代码尝试搜索过程如下:

  constant char str[] = "UCAST"; 
     char* pch = strstr(analysis_buffer,str); 

     if (pch!=NULL) { 
      printf("found at %d\n", pch - analysis_buffer + 1); 

      pch = strstr(pch+1, analysis_buffer); 
     } else { 
      printf("pch :%s\n", pch); 
     } 

注意:analysis_buffer是我上面描述的数组。

我遇到的问题是,strstr位数量为NULL,而它不应该。有任何想法吗?

我看了一下计算器上以下链接获得帮助:

Does char array contain string?

How to search a string in a char array in C?

THANKS

+0

欢迎来到SO。回复张贴的答案时,请勿更改原始问题。对于提出问题的人而言,这让人感到困惑,并使得张贴的答案变得多余。 – hmjd

+0

道歉..不会再这样做 – TokTok123

+0

它编译?实际分配给'analysis_buffer'的是什么? –

回答

3

的代码是不正确的数组是一元太短初始化程序:

char str[5] = "UCAST"; 

由于将隐式空字符添加到所有字符串文字中。从部分6.4.5字符串文字C99标准点5:

在翻译阶段7,字节或零值代码被附加到从字符串产生字面或字面每个多字节字符序列。 ...

可能的修正:

  • 允许所需的阵列尺寸的扣:

    char str[] = "UCAST"; 
    
  • 使用const char*,因为它是不需要的对str进行修改:

    const char* str = "UCAST"; 
    

请注意,正在搜索的字符串(本例中为analysis_buffer)也必须为空终止。从发布的代码,这不是很明显,这是发生。

此外,最终的printf()语句不正确,因为格式说明符是%c,但参数(pch)类型是char*。通常情况下,无论是使用%s和使用pch或使用%c*pchpch是在if因此它可以在printf()未使用的这个分支NULL

+0

啊我看到..所以如何存储我想要搜索的字符串..可能是这样的.. char str [] =“UCAST”; – TokTok123

+0

@ user34395,刷新你的页面,因为我有这个答案。 – hmjd

+0

只是看到它。让我尝试一下。 – TokTok123