我想分割一個數組(字符串1)的n個字符分成兩個字符指針分別代表我的字符(字符*第一)和n-i字符(字符*秒)。對於第二個陣列,我用如何劃分一個字符數組
char* second = string1+n;
我想知道的是如何在第一個只使用第一個字符。我不想爲這兩個數組分配更多的內存,我想操作string1,以便指向已經存在的部分。
編輯:
我無法編輯string1。我是否可以首先以某種方式強制縮短長度而不添加空字符?
我想分割一個數組(字符串1)的n個字符分成兩個字符指針分別代表我的字符(字符*第一)和n-i字符(字符*秒)。對於第二個陣列,我用如何劃分一個字符數組
char* second = string1+n;
我想知道的是如何在第一個只使用第一個字符。我不想爲這兩個數組分配更多的內存,我想操作string1,以便指向已經存在的部分。
編輯:
我無法編輯string1。我是否可以首先以某種方式強制縮短長度而不添加空字符?
除非你分配更多的內存,否則你不能像使用任何其他C字符串一樣使用「first」(例如將它傳遞給字符串函數,printf
等),因爲它不是以「second 」。
在許多情況下,你仍然可以解決這個問題,因爲你知道這個長度,但是這裏沒有什麼不可思議的;空終止符需要一個字節。
可以將字符串1以某種方式讓指針認爲這只是我的長度? – mrswmmr 2012-02-01 03:34:33
不知道還有什麼要告訴你,那不是它的工作原理。 – 2012-02-01 03:36:43
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';
我假設strdup分配內存,因爲我需要以後免費使用,對嗎? – mrswmmr 2012-02-01 03:32:30
@ mrswmmr,yessir。它可以讓你不必自己使用'malloc()'。 – 2012-02-01 03:32:58
在回答您的編輯,不,你需要複製它。你可以使用'strndup()',它需要一段時間才能複製它的某個部分並自動分配內存。 – 2012-02-01 03:35:35
可能重複的[如何從字符數組中檢索n個字符](http://stackoverflow.com/questions/162804/how-to-retrieve-n-characters-from-char-array) – 2012-02-01 10:54:06