2014-02-24 245 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