天天看點

字元串整體指派和比較問題

目錄

  • ​​字元串整體指派問題​​
  • ​​一、指針式指派法​​
  • ​​二、用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()函數來比較

    例:

繼續閱讀