c++ 自带string类 的对象 字符串结尾带不带‘\0’?
黄舟
黄舟 2017-04-17 13:44:57
0
6
776

c++ 自带string类 的对象 字符串结尾带不带‘0’?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(6)
大家讲道理


先上圖

string 類型把' 0'當做普通字符處理,長度加一,可見' 0'不是結束字符,不含有特殊功能,string末尾不需加' 0'

C語言中沒有string類型,而是用字元陣列代替,一般字元陣列可以不確定長度
char * string = " ABCD" ,編譯器靠什麼知道字串結束,一般在後面加' 0 '

小葫芦

C++ 中的std::string和 C-style string 是兩種不同的字串,前者是標準函式庫中定義的一個類,後者是字元陣列的別名。

  • C-style string:通常以

Ty80

0是C語言中的字元陣列作為結束標記用的,C++字串沒有這個需要

巴扎黑

何不建立string對象,列印看看他的size?

巴扎黑

c語言用char*指標當字串時,在讀取字串時需要一個特殊字元0來標記指標的結束位置,也就是通常認為的字串結束標記。
而c++語言則是物件導向的,長度資訊直接被儲存在了物件的成員中,讀取字串可以直接根據這個長度來讀取,所以就沒必要需要結束標記了。而且結束標記也不利於讀取字串中夾雜0字元的字串。

参照std::string的实现 bits/basic_string.h
大家讲道理

String本身是封裝過的,會把'

#include <iostream>
#include <stdio.h>
#include <string>
using std::string;
using namespace std;


void test1(){
    string s1 = "Hello";
    const char * v1 = s1.data();
    printf("0x%.2x\n", v1[s1.size()]);

    string *s2 = new string("Hello");
    const char * v2 = s2->data();
    printf("0x%.2x\n", v2[s2->size()]);

}

void test2(){
    string s1 = "Hello";
    const char * v1 = s1.c_str();
    printf("0x%.2x\n", v1[s1.size()]);

    string *s2 = new string("Hello");
    const char * v2 = s2->c_str();
    printf("0x%.2x\n", v2[s2->size()]);;
}

int main()
{
    test1();
    test2();
    return 0;
}

輸出都是0x00
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!