[英]“converting an a char array to a string”
抱歉,如果我的以下問題聽起來很瑣碎,但我正在為在strstr()
方法中使用的“將char數組轉換為字符串”這一基本概念感到strstr()
。
本質上,我有一個名為EUI_only[]
的數組,該數組在程序的某個階段動態填充,即
EUI_only[0] = A;
EUI_only[1] = B;
EUI_only[2] = C;
EUI_only[3] = D;
EUI_only[4] = E;
我在程序頂部聲明了EUI_only:
char EUI_only[];
我可以確認EUI_only[]
已成功填充,就在我將其打印出方法strstr()中使用它之前。
現在,我有第二個數組稱為receive_key_press_temporary_analysis_buffer
,我打算在我的strstr()
利用它,即該數組包含的字符與EUI_only中的字符相似。
該數組還在程序的特定位置動態填充,在打印此數組之前,可以在strstr()
使用該數組之前確認該數組的內容是完整的。
這個數組的內容稱為receive_key_press_temporary_analysis_buffer可以在下面看到:
receive_key_press_temporary_analysis_buffer[0] = 1;
receive_key_press_temporary_analysis_buffer[1] = 2;
receive_key_press_temporary_analysis_buffer[2] = C;
receive_key_press_temporary_analysis_buffer[3] = A;
receive_key_press_temporary_analysis_buffer[4] = B;
receive_key_press_temporary_analysis_buffer[5] = C;
receive_key_press_temporary_analysis_buffer[6] = D;
receive_key_press_temporary_analysis_buffer[7] = E;
receive_key_press_temporary_analysis_buffer[8] = 3;
receive_key_press_temporary_analysis_buffer[9] = 4;
下面本質上是我如何在strstr()
使用兩個數組:
char* is_eui_only_content_in_receive_key_press_analysis = strstr(receive_key_press_temporary_analysis_buffer, EUI_only);
printf("\n\rResult of is_eui_only_content_in_receive_key_press_analysis: %s\n\r", is_eui_only_content_in_receive_key_press_analysis);
基本上,當我打印strstr()
的結果時,它給了我:
Result of is_eui_only_content_in_receive_key_press_analysis: CDE34
另一方面,如果我重新初始化,則EUI_only如下:
EUI_only [] =“ ABCDE”;
本質上,我從strstr()獲得預期的結果,即
Result of is_eui_only_content_in_receive_key_press_analysis: ABCDE34
當我使用動態填充的EUI_only []數組時,為什么strstr()沒有給我期望的結果?
謝謝,亞歷克斯。
如果您唯一的定義是char EUI_only[];
那么實際上它的大小為1
。 通過向其寫入5個字符會導致緩沖區溢出。 在C語言中,數組不會自動調整大小。 它們的使用壽命是固定的。
成功打印其內容並不能證明任何事情,因為可能會發生以下情況:將數據寫入您不擁有的內存中,但是在寫入和讀取之間沒有任何干擾。
其次, str
函數需要一個string 。 字符串的定義是一系列字符,后跟一個空字符。 在示例代碼中,您沒有空字符,因此即使您沒有分配問題,您實際上也沒有字符串。 因此功能不正常。
當您編寫char EUI_only[] = "ABCDE";
,它正在執行char EUI_only[6] = { 'A', 'B', 'C', 'D', 'E', 0 };
這是一個字符串,因此一切正常。
更新: C99 6.9.2“臨時定義”涵蓋了數組大小為1
的原因。 在char EUI_only[];
行之后char EUI_only[];
, EUI_only
類型不完整。 對於不完整的數組類型,可以取消引用它,但不能對其執行sizeof
。 您可以稍后在源文件中的任何時候完成輸入。 如果沒有,則其行為就像源文件的最后一行是char EUI_only[] = { 0 };
。 這是C很少使用的功能。 通常,您可以通過指定大小或提供初始化程序來聲明完整類型。
C字符串以空'\\0'
字符終止
EUI_only[5] = '\\0' ;
和
receive_key_press_temporary_analysis_buffer[10] = '\\0' ;
確保聲明時有多余的空間用於空字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.