天天看點

指針和字元串常量

指針和字元串常量

首先比較兩段代碼

代碼1

char ch1[] = "hello";
    *ch1 = 'H';            //OK
    ch1[0] = 'H';          //OK
    printf("%s\r\n",ch1);
           

代碼2

char *ch2 = "world";
    *ch2 = 'W';            //運作時錯誤
    ch2[0] = 'W';          //運作時錯誤
    printf("%s\r\n",ch2);
           

這裡的“world”是字元串常量,而“hello”不是。

代碼2裡,*ch2和ch2[0]其實就是指‘w’,而‘w’是常量自然無法修改!

一般定義成 const char * = “world”;避免上述運作時的錯誤。

如果想修改字元串的值,就應該定義成代碼1的形式!或者如下在堆上申請:

char *s = (char *)malloc(sizeof(char)*6);
    strcpy(s, "hello");
    s[0] = 'H';
    printf("%s\r\n", s);
           

這個“hello”也不是一個字元串常量,因為是在堆上申請的,也可以用指針來讀和寫!

繼續閱讀