C語言中指標和字串中的一些小結

2021-06-27 13:52:39 字數 1710 閱讀 5667

void a_a(char *str) }

這是乙個把字串中的字元轉化為大寫的函式

學指標的時候,我這樣定義:

char *str ="hello wrold";
結果執行程式直接崩潰了,後來發現:

這是指向常量的不能修改,執行的話會崩潰,也就是只允許讀,不允許寫

用陣列的話就沒有問題:

char str1="hellllo world";

後來我又在考慮乙個問題,怎麼執行複製的操作呢,我嘗試了如下**:

char *a="hello world";

char b=;

for (int i = 0; i < 20; i ++)

puts(b);

結果還是崩潰了,用陣列的話是沒有問題的

然後我想起字串的話c語言是有複製的方法的

strcpy(<#char *#>, <#const char *#>);

後面可以是常數,於是我執行了以下操作:

char *a="hello world";

char b=;

strcpy(b, a);

puts(b);

結果。。。還是程式崩潰

然後,繼續測試。。。

char *a="hello world";

char b="hgashjgdsjhasjhas";

puts(strcpy(b, a));

然後,執行成功了,應該是b陣列中要有》=a的記憶體才能得到a中的字元

照著這個方法我又返回來測試了自己寫的複製:

char *a="hello world";

char b="hgashjgdsjhasjhas";

// strcpy(b, a);

// puts(b);

for (int i = 0; i < 20; i ++)

puts(b);

結果執行是成功了的.

然後我再次測試(陣列陣列的複製):

char b = "hgashjgdsjhasjhas";

char c = ;

// strcpy(b, a);

// puts(b);

for (int i = 0; i < 20; i ++)

puts(c);

結果執行成功

hgashjgdsjhasjhas

猜想:複製的時候,陣列複製指標常量的時候不是會開闢記憶體的

為驗證我的猜想,做了如下測試:c,括號裡面的值改變

char *a = "hello world";

char c[20] = ;

// strcpy(b, a);

// puts(b);

for (int i = 0; i < 20; i ++)

puts(c);

執行成功。

C語言中的指標和字串

務必理解指標與記憶體模型,不要死記硬背。c語言中的字串一般是char 型別的,這是怎樣存在記憶體中的呢?cchar s nihao s 400 n i h a o 0 400 401 402 403 404 405 如是上圖,假設字母a處於記憶體的第400號格仔,那麼後面幾個字母也是緊跟著的。變數s...

在c語言中 C語言中的指標和字串

之前我們說過關於字元的一些內容,字元的原理,歸根到底就是將我們常用的一些字元根據編號整理成一張統一的表,每個字元對應著這個表裡面的乙個數值,這一過程就是字元的編碼。然而大多數時候我們根本就不會使用單個字元,比如計算機上面要輸出一句句子 hello world 這個句子裡面就是由多個字元所組成的,分別...

C語言中字元陣列和字串指標分析

寫下面的測試程式 include int main int argc,char argv 執行後螢幕上得到如下結果 其實看到結果估計很多東西就好明白了,先看看前三個輸出也就是關於變數day的,在 char day 15 abcdefghijklmn 這個語句執行的時候,系統就分配了一段長15的記憶體...