C/C++中字符串常量的不相等性及字符串的Copy

2021-01-07 太平洋電腦網

#include <iostream> 
 
void main(void) 

    if("test"=="test") 
    { 
        cout<<"相等"; 
    } 
    else 
    { 
        cout<<"不相等"; 
    } 
}



  上面的代碼我們測試兩個內容為test的字符串常量是否相等,按照常理,應該是相等的,這些在一些過程式語言中會得到相等的結論,但在c/c++卻不是這樣。

  為什麼呢?

  答案在這裡:因為字符串常量存儲在計算機內存中,兩個字符串常量的地址均不相同,所以這樣的比較自然就不會得到我們所需要的結果,如果要進行是否相等的比較應該使用strcmp()這個涵數進行比較!

#include <iostream> 
#include <string> 
using namespace std; 
void main(void)   
{   
    if(strcmp("test","test")==0)   
    {   
        cout<<"相等";   
    }   
    else   
    {   
        cout<<"不相等";   
    } 
    cin.get(); 
}

  strcmp()的函數原形是,int strcmp(const char* str1,const char* str)

  相當將會返回一個等於0的整數,不相等的時候將會返回一個非0整數。

#include <iostream> 
#include <string> 
using namespace std; 
void main(void)   
{   
    char test[]="test str!"; 
    char str[15]; 
    strcpy(str,test); 
    cout<<str<<endl; 
 
    int a[]={1,2,3,4,5}; 
    int b[5]; 
    memcpy(b,a,sizeof(a)); 
    for(int i=0;i<5;i++) 
    { 
        cout<<b[i]<<","; 
    } 
    cin.get(); 
}

  上面的代碼中的strcpy用來處理字符串數學組的copy,由於字符串數組屬於const char*也就是常量指針所以是不能用a="test str!";的方式賦值的,接在後面的memcpy用於處理非\0結尾的數組的copy處理,memcpy第三個參數是設置b在內存中所需要的內存空間大小所以用sizeof(a)*sizeof(int)來處理。

相關焦點

  • 淺談Java中字符串的初始化及字符串操作類
    對於這種直接通過雙引號""聲明字符串的方式, 虛擬機首先會到字符串常量池中查找該字符串是否已經存在. 如果存在會直接返回該引用, 如果不存在則會在堆內存中創建該字符串對象, 然後到字符串常量池中註冊該字符串。在本案例中虛擬機首先會到字符串常量池中查找是否有存在"hello"字符串對應的引用.
  • C/C++中字符串與數字轉換
    方法一:c++11中string中添加了下面這些方法幫助完成字符串和數字的相互轉換stod stof stoi stol stold stoll stoul stoull函數原型:float stof (const string& str, size_t* idx = 0);to_string to_wstring
  • C++之字符串類學習總結
    一、回顧c語言對字符串的實現:一般我們在c語言要實現對字符串操作的話,一般是採用字符數組或者一組函數來實現的,為啥這樣做呢,那是因為c語言裡面根本就沒有字符串類型的關鍵字;而且c語言也支持自定義類型,所以更加無法獲得字符串類型為了解決這個問題,在c++中,引入了自定義類型,而且可以通過類來完成對字符串類型的定義。
  • 一文帶你了解c++和c中字符串的使用
    對於c語言當中,你好像沒有看到有關於字符串定義的關鍵字,不像我們常規的整型、浮點型、字符類型、指針、數組、結構體等數據類型,都能夠一眼就能看出他們是什麼數據類型
  • C語言字符數組和字符串
    字符數組的各個元素依次存放字符串的各字符,字符數組的數組 名代表該數組的首地址,這為處理字符串中個別字符和引用整個字符串提供了極大的方便。一、字符數組字符數組的定義形式與前面介紹的數值數組相同。例如: 字符數組也允許在定義時進行初始化賦值。
  • Python中的轉義字符串與格式化字符串
    # 格式化字符串# 常用佔位符# %s 格式化字符串# %d 格式化整數格式化字符串# 使用佔位符,格式化print("我喜歡%s,在%s年" %(c,n))f = 1.133格式化字符串# 轉義字符串# \\# \'
  • Swift字符串和字符
    字符串連接操作只需要簡單地通過 + 號將兩個字符串相連即可。與 Swift 中其他值一樣,能否更改字符串的值,取決於其被定義為常量還是變量。儘管語法簡易,但 String 類型是一種快速、現代化的字符串實現。每一個字符串都是由獨立編碼的 Unicode 字符組成,並提供了用於訪問這些字符在不同的Unicode表示的支持。
  • 如何將字符串常量轉為變量?
    簡單理解,這個問題的意思是,將字符串內容作為其它對象的變量名。 list 中的元素是字符串,此處的 『A』-『D』 是常量 ,而在要求的結果中,A-D 是變量 。globals() 方法取出來的是一個字典,字符串 『A』 是其中一個鍵值(key),而這個鍵值恰恰是全局命名空間中的一個變量,這就實現了從常量到變量的轉化。在數據結構層面上,空列表 [] 作為一個值(value)跟它的字符串鍵值綁定在一起,而在運用層面上,它作為變量內容而跟變量名綁定在一起。
  • C/C++中字符串string類型
    瀏覽器版本過低,暫不支持視頻播放字符串型作用:用於表示一串字符>兩種風格1.C風格字符串: char 變量名[] = "字符串值"示例:int main() {char str1[] = "hello world";
  • 在字符串中搜索標記--labview字符串函數之一
    一直未能找到合適的字符串函數來解析出來有效數據,而昨天恰恰看到了這樣一個字符串函數——在字符串中搜索標記。的值為FALSE(默認值),多個相鄰的分隔符可以分隔輸入字符串中的兩個標記。如允許空標記?的值為TRUE,在每個相鄰分隔符對之間都將返回空的標記字符串。輸入字符串是要搜索標記的字符串。偏移量是輸入字符串中開始掃描的點。默認值為0,即字符串的起始位置。運算符是字符串數組,如輸入字符串包含字符串數組,即使它們沒有被分隔符分隔,函數仍將其視為標記。
  • 一文讀懂 Java 字符串相關知識點和常見面試題
    System.out.println(str.substring(2)); //取出從index2開始直到最後的子串,包含2 System.out.println(str.substring(2,4)); //取出index從2到4的子串,包含2不包含4 顧頭不顧尾 }}兩個方法的使用,求字符或子串第一次/最後一次在字符串中出現的位置
  • Java之字符串內容的比較
    各位小夥伴們大家好,這次小編要介紹的是,Java當中字符串的比較的相關方法。在之前的文章中,小編有介紹過,對於引用數據類型來說,==是進行地址值的比較,其實也可以對字符串的內容進行比較,有兩個方法:方法一:public Boolean equals(Object obj);(參數可以是任何對象,只有參數是一個字符串並且內容相同時才會是true,否則返回false
  • 【C語言更新】C語言中字符串的操作
    size_t  strcspn(const char *str1, const char *str2)檢索字符串  str1 開頭連續有幾個字符都不含字符串 str2 中的字符。char  *strerror(int errnum)從內部數組中搜索錯誤號  errnum,並返回一個指向錯誤消息字符串的指針。
  • C語言複習計劃(五)|「字符串」篇
    2.字符串複製函數strcpy()和strncpy()調用格式:strcpy(字符數組1,字符串2)功能:複製第二個參數的內容到第一個參數中。第一個參數必須有足夠的內存來接受第二個參數,第二個參數可以是含有結束符'\0'的字符串(字符數組或字符串常量)。
  • MATLAB字符和字符串
    一個字符串被視為一個行向量,而字符串中的每一個字符(含空格符),則是以其ASCII的形式存放於此向量的每一個元素中,只是它的外顯形式仍然是可讀的字符。字符串類型在數據的可視化、應用程式的交互方面有著非常重要的作用。
  • Java常量池解析與字符串intern簡介
    ,是class文件常量池映射到虛擬機中的數據結構。對CONSTANT_String常量池的解析首先就要查看字符串池中該字符串對象的引用是否存在, 如果存在則直接把常量池數據解析為該字符串對象的引用,若不存在,那麼就需要根據這個字符串序列創建一個字符串對象,並將其引用加入到字符串池中,並將常 量池數據解析為該引用。
  • 【C++】搞懂char與wchar_t字符串
    來分析一下代碼,其中str1、str3、str4是一個東西(str3區別只是內存在堆上),str2是字面值常量,str5是單純的字符數組。1.1. 常規字符串對於str1、str3、str4這種正常的字符串,就可以隨意拿字符串函數和下標訪問,進行各種操作。
  • Ruby 字符串(String)
    11str.casecmp不區分大小寫的字符串比較。12str.center居中字符串。13str.chomp從字符串末尾移除記錄分隔符($/),通常是 \n。如果沒有記錄分隔符,則不進行任何操作。14str.chomp!
  • Rob Pike 帶你重新認識字符串、字節、rune和字符
    什麼是字符串?讓我們從一些基礎知識開始。在 Go 中,字符串實際上是只讀的字節切片。如果你完全不知道一個字節切片是什麼以及它是如何工作的,請閱讀上一篇博客文章 ; 我們在這裡假設你已經知道這些。預先說明字符串可以包含任意字節很重要,字符串沒有規定只能包含 Unicode 文本,UTF-8 文本或任何其他預定義格式。
  • c語言指針與字符數組
    我們所說的字符串就是字符數組的一種,就如我們常見的"hello world!",字符串的使用在C語言中也是非常重要的,常常會遇到一些操作,如字符串的修改、拷貝、字符串長度等,在物聯網的應用中也尤為突出,物聯網應用中所用的模組,大多是需要使用AT指令的,這就需要對字符串的操作。