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的記憶體...