2012-04-27 60 views
0

所以我有一個char *。我想在最後切斷一點。所以切斷char *的末尾*

char *sentence = "My name is Ted"; 

如何切斷特德。我可以使它成爲一個字符串,然後使用子字符串(來自Java,這是我去的方法),但ID而不是這樣做。但我不知道如何用char *來做到這一點。

編輯:進一步的問題。問題出在一個函數中,該函數需要一個進程,並且意味着當該進程從其開始時返回該位置。這很好,我可以得到。但是參數char * procLocation是通過引用傳遞的,所以該位置將被髮回。

我只能得到包含進程名稱的位置。我想切斷進程的名稱並返回該位置。我試着讓位置成爲一個字符串並且做一個子字符串(字符串 - processName的長度)。沒關係。但

procLocation = location.c_str(); // where location.substr is the location - the process name 

還給一個錯誤:錯誤C2440:「=」:無法從「爲const char *」轉換成「字符*」

+3

替換爲 'T' '\ 0'; – kenny 2012-04-27 10:27:55

+1

「但是id不是這麼做的 - 」**爲什麼不呢?!**這是要走的路。 – 2012-04-27 10:28:05

+6

@kenny nope,你不能修改文字。 – 2012-04-27 10:28:56

回答

9

自認爲是一個字符串文字,你不能修改它。

如果你做的事:

char sentence[] = "My name is Ted"; 

你可以在字符簡單地設置Ted之前\0

雖然你可能會更好使用std::string

+3

我不同意您的SHOULD聲明的義務性 – 2012-04-27 10:29:14

+0

@BorisStrandjev * should *與* must *不一樣。 – 2012-04-27 10:30:29

+1

@LuchianGrigore:'你可能會更好地使用...'可能會更好? – Nick 2012-04-27 10:31:11

4

而是切斷你的文字,你可以使用std::string構造函數,拷貝更少的字符比可用您char*

const char *data = "Hello, Ted!"; 
string s(data, data+8); 
cout << s << endl; 

這將打印Hello, T

這種方法比發出std::string減少浪費並採取子串。

1

你原來的問題,因爲你是從Java來了,你應該(應該在RFC2119的意義上)肯定使用std::string

#include <string> 
#include <iostream> 
using namespace std; 

int main(int argc, const char** argv) { 
    // copy c-string to std::string 
    string arg0 = argv[0]; 
    cout << arg0 << endl; 
    // find last occurrence of path separator 
    size_t found = arg0.find_last_of("/\\"); 
    // split off filename part of string 
    cout << arg0.substr(0,found) << endl; 
    return 0; 
} 

此外,你不應該(不應該在RFC2119的意義上)聲明char數組作爲char指針,但作爲一個char陣列:

char[] s0 = "Hello World!"; // <-- is better 
char * s1 = "Hello World!"; // <-- avoid this 

實際原因見this post爲什麼這是更好的。它還給出了爲什麼不修改這些右值字符串的原因。

0

你已經標記了'C++'和'string'這個問題,但是你說你不想用stringsubstr這麼做?不知道爲什麼。你應該應該儘可能優先於char*和C風格的字符串操作函數。

要做到這一點的C++方式:

string sentence = "My name is Ted"; 

cout << "\"" << sentence.substr(0, sentence.rfind(' ')) << "\"" << endl; 

雖然你可以(稍微修改代碼,讓您有一個可變的字符串在c)做到這一點:

char sentence[] = "My name is Ted"; 
*strrchr(sentence, ' ') = '\0'; 

printf("\"%s\"\n", sentence);