目錄
- 字元串整體指派問題
- 一、指針式指派法
- 二、用strcpy()函數法
- 字元串整體比較問題
字元串整體指派問題
我們平常給一個字元串初始化了,但是後面我們想重新賦一個字元串卻錯誤了,如下面的操作。
char a[10]="hello";
a="word";//這裡是錯誤的不能整體指派
因為:數組名的實質是指針常量,你不能給一個指針常量修改。
那麼如何給一個字元串整體的指派呢?
解決方法:
一、指針式指派法
#include<stdio.h>
int main()
{
char *a="hello";
a="world";
printf("%s\n",a);
printf("%c\n",*a);
printf("%c\n",*(a+1));
return 0;
}
我們可以看到 "hello " 已經改為 " world " 了。
對于語句 char *a="hello";
對于這個聲明方式,會造成的誤解是:聲明了一個字元指針(它會指向一個位置),将“字元串”指派給 指針表達式"*a"所指向的位址。
但正解是:聲明了一個字元指針後,并用字元串常量的第一個字元的位址指派給指針變量a。
即正确順序是:1.配置設定記憶體給字元指針;2.配置設定記憶體給字元串;3.将字元串首位址指派給字元指針;
這裡有兩點需要考慮清楚的地方:
① *a隻是指向一個字元!
這裡有一點是特别不容易想通的
a是 char * 型 的也就是字元指針 為啥輸出字元串時直接 a 就可以了 ,不應該用 星号(*) 取内容麼?
這是因為:
%s它要求參數是一個指針!!!即: 要求 char * 類型
%s 字元串的格式輸出, 它是一個接一個挨着輸出, 直到遇見'\0'才中止
其實列印字元串時,程式內部是逐個字元來處理的,直到遇到空字元('\0')才停下來。
是以才需要傳入位址,然後依次往後處理直到遇見空字元。
下面我以圖解的方式來加深印象。
例:
char *p="hello;
printf("%s",p);
二、用strcpy()函數法
用 strcpy() 函數來實作整體指派
字元串整體比較問題
通過上圖可以看出,a 和 b 的内容一樣,為啥沒有輸出123呢?
因為 a==b 判斷的是其 a 和 b 的首位址是否相同
我們可以看到 a 和 b 的首位址不相同是以不會輸出123
- 一、可以逐個字元的比較
-
二、用strcmp()函數來比較
例: