程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 小小的C語言問題指針數組賦值

小小的C語言問題指針數組賦值

編輯:關於C
先上代碼吧:  
<span style="font-size:14px">#include <iostream>  
#include <cstring>  
using namespace std ;  
  
int replacefun(char* str, char c1, char c2);  
  
int main(void)  
{  
    char * p = "I love you China, do you love me?";    // 用指針的形式定義一個字符數組  
    int m = 0;  
    m = replacefun(p, 'o', 'c');  
    cout << m << endl;  
    return 0;  
}  
  
int replacefun(char* str, char c1, char c2)  
{  
    int num = 0;  
    while (*str != '\0')  
    {  
        if (*str == c1)  
        {  
            *str = c2;  // 這句話調試的時候內存報錯  
            num++;  
        }  
        str++;  
    }  
    return num;  
}  
</span>  

 

    這個程序實現的目的的是替換指定的字符,在編譯的時候沒有任何錯誤,但是在運行的時候,程序意外終止。   於是,啟動利器,單步調試。。。跳進函數後,發現在*str到達'o'之前一切正常,不過。。到了'o'之後,結果說內存錯誤,無法賦值。   經過多方查找資料和詢問,得知: char *p="abcde";的時候,字符串是不可以修改的! 而char p[]="abcde";的時候,字符串是可以修改的! 同一個字符串,用指針定義的時候在常量區,而用數組定義的時候在棧中。 就是剛剛上面的那個 I love you China, do you love me? 是一個常量。 據大嬸說: "I love you China, do you love me?" 在存放在.rodata段,該段是只讀的,當你強行做修改的時候,當然要報錯喽。   而定義為數組的形式之後:就把這個字符串拷貝進數組了,對於數組中的內容,可以隨便修改呀. 原來的字符串還是不變的。。。   以上總結,漲姿勢了。   繼續C++。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved