2013-03-16 74 views
-7

有沒有辦法獲得以空字符結尾的字符串的大小?獲取cstring的大小

Ex。

char* buffer = "an example"; 

unsigned int buffer_size; // I want to get the size of 'buffer' 
+0

是的,存在並且很重要。你顯然沒有試圖谷歌這一點。 – 2013-03-16 18:02:58

回答

6

注意,在C++ 11字符串文字具有類型const char[],並轉化爲char*(即指針到非const)是非法。這個說:

#include <cstring> // You will need this for strlen() 
#include <iostream> 

int main() 
{ 
    char const* buffer = "an example"; 
    // ^^^^^ 
    std::cout << std::strlen(buffer); 
} 

但是,因爲你寫C++而不是C(至少這是什麼標籤索賠),你應該使用類和算法從C++標準庫:

#include <string> // You will need this for std::string 
#include <iostream> 

int main() 
{ 
    std::string buffer = "an example"; 
    std::cout << buffer.length(); 
} 

查看live example

注:

如果您正在使用的API需要C字符串,你可以使用一個std::string對象的c_str()成員函數來檢索char const*指針可以使用c_str ()成員函數的std :: string對象內存緩衝區包含封裝的C字符串。請注意,您無法修改該緩衝區的內容:

std::string s = "Hello World!"; 
char const* cstr = s.c_str(); 
+0

的任何功能好的,謝謝。我其實正在寫一個贏取應用程序,我需要使用cstrings,或者我? – 2013-03-16 18:14:16

+0

@ anon666:不,你不需要。你可以使用'std :: string'對象的'c_str()'成員函數來得到一個'char const *'指針,它是一個包含封裝C字符串的內存緩衝區。請注意,您無法修改該緩衝區的內容。 – 2013-03-16 18:17:01

+0

我不知道你爲什麼提出了常量的事情。將非const char *'傳遞給'strlen()'是完全正確的。 – 2013-03-16 18:17:44

3

嘗試strlen(buffer)<cstring>。它返回你在傳遞字符串的長度。

+0

謝謝@David。我忘了包括包含。 :) – hvanbrug 2013-03-16 18:12:59

+0

謝謝,我沒有想到要檢查標準克隆 – 2013-03-16 18:15:35