關於“c語言從鍵盤輸入字符串到指針數組”的問題


今天敲了一段代碼,遇到了從鍵盤輸入多個字符串到指針數組的問題,在程序執行的時候出現了段錯誤的提示。本文主要涉及到了以下知識:

  • 數據的存儲
  • 數組和指針

1.字符串常量的存儲

c語言中字符串常量存儲在靜態數據區,並且有字符串結束符,直到程序運行結束它才會被銷毀,所以在程序中我們把一個字符串常量賦值給一個字符指針,如:

char *pChar = "Hello World!";

其中,”Hello World!”是一個字符串常量,pChar是一個字符指針。該句相當於將字符’H’在靜態數據區中的地址賦給pChar。此時,字符串常量”Hello World!”只有一份存儲在靜態數據區。

另外一種常見的類型是將一個字符串常量賦值給一個字符數組,而其余上面的指針形式有本質上的區別,如下:

char str[] = "Hello World!";

其中,”Hello World!”是一個字符串常量,str是一個字符數組。此時,程序會將字符串常量”Hello World!”拷貝一份到棧區(如果str是局部變量),從此將於字符串常量”Hello World!”再無聯系。

2.從鍵盤輸入字符串

從上面可以看出,我們可以給一個字符指針賦一個字符串常量,因為字符串常量在內存中真實存在且有其地址。而從鍵盤輸入則不然,我們必須先分配一些空間用來存儲鍵盤輸入的字符串,例如:

char* str = (char*)malloc(sizeof(char) * 100); scanf("%s", str);

這樣我們輸入的字符串就會存儲在str所指向的動態空間內。對指針數組的賦值參考以上即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM