簡體   English   中英

“將char數組轉換為字符串”

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM