2012-02-01 85 views
2

我想分割一個數組(字符串1)的n個字符分成兩個字符指針分別代表我的字符(字符*第一)和n-i字符(字符*秒)。對於第二個陣列,我用如何劃分一個字符數組

char* second = string1+n; 

我想知道的是如何在第一個只使用第一個字符。我不想爲這兩個數組分配更多的內存,我想操作string1,以便指向已經存在的部分。

編輯:

我無法編輯string1。我是否可以首先以某種方式強制縮短長度而不添加空字符?

+0

在回答您的編輯,不,你需要複製它。你可以使用'strndup()',它需要一段時間才能複製它的某個部分並自動分配內存。 – 2012-02-01 03:35:35

+0

可能重複的[如何從字符數組中檢索n個字符](http://stackoverflow.com/questions/162804/how-to-retrieve-n-characters-from-char-array) – 2012-02-01 10:54:06

回答

2

除非你分配更多的內存,否則你不能像使用任何其他C字符串一樣使用「first」(例如將它傳遞給字符串函數,printf等),因爲它不是以「second 」。

在許多情況下,你仍然可以解決這個問題,因爲你知道這個長度,但是這裏沒有什麼不可思議的;空終止符需要一個字節。

+0

可以將字符串1以某種方式讓指針認爲這只是我的長度? – mrswmmr 2012-02-01 03:34:33

+1

不知道還有什麼要告訴你,那不是它的工作原理。 – 2012-02-01 03:36:43

1

C中的字符串必須是NULL-終止的,即在其末尾具有\0字符。如果你有,例如,兩個詞用空格分開,就像這樣:

char *str1 = "fat chance"; 

您也可以用\0替代空間「分裂」他們:

str1[3] = '\0'; 

然後設置str2點到\0後:

char *str2 = str1 + 4; 

但是,如果你需要的東西被分割那裏沒有擺在終止一個方便的地方,那麼你需要將字符串的第二部分複製到別處。最簡單的方式做到這一點(如果你不介意到free()它以後),就是用strdup(),並把一個NULL終結者str1之後:

char *str2 = strdup(str1 + 4); 
str1[4] = '\0'; 
+0

我假設strdup分配內存,因爲我需要以後免費使用,對嗎? – mrswmmr 2012-02-01 03:32:30

+0

@ mrswmmr,yessir。它可以讓你不必自己使用'malloc()'。 – 2012-02-01 03:32:58