要「刪除」 C字符串的一部分,所有你需要做的是設置你要保持一個0
最後一個之後的字符。 (我在這裏說「刪除」(引用),因爲你實際上並沒有從內存中刪除任何東西;'字符串'變短了,但爲它分配的內存量保持不變,並且所有超出0
的內容仍然可用。
有一個標準的string.h
函數來定位最後一次出現的某個字符:strrchr
。這將返回一個
[P],如果沒有這樣的字符被發現
所以要找到最後一個反斜槓,並砍掉什麼是它背後ointer在str
找到的字符,或空指針,你可以使用
char *ptr;
ptr = strrchr (address1, '\\');
if (ptr) ptr[1] = 0;
注意明確的測試,看看是否ptr
居然發現一個反斜槓。
現在你實際上並沒有想要放棄那個反斜槓後的所有東西,你想複製一些新的東西。對於這一點,你不需要先改短,然後(可能)使用strcat
,您可以使用strcpy
馬上:
ptr = strrchr (address1, '\\');
if (ptr)
strcpy (ptr+1, "tmp.txt");
else
strcpy (address1, "tmp.txt");
其個人而言,我通常寫爲
ptr = strrchr (address1, '\\');
if (ptr) ptr++; else ptr = address1;
strcpy (ptr, "tmp.txt");
請注意,兩者都使用ptr+1
,因爲ptr
本身指向「at」反斜槓;你想保留它。
使用字符串連接如下所示存在固有的危險:如果最後一個反斜槓之後的部分短於新插入的字符串,則可以在字符串之後覆蓋數據。這首先取決於整個如何創建address1
。一個很髒修復是明確測試如果address1
的當前內容有足夠的剩餘空間:(我只添加此的完整性;你可能不應該在產品代碼中使用此)
char *to_add = "tmp.txt";
ptr = strrchr (address1, '\\');
if (ptr && strlen(ptr+1) <= strlen(to_add))
strcpy (ptr+1, to_add);
else
printf ("too long, ignored\n");
原因strcpy
(和strcat
以及相關的字符串函數)無法知道是否有足夠的剩餘空間是因爲簡單的C字符串不會在任何地方存儲可用的最大長度。
顯示你的一些努力。 – Marievi
我沒有任何想法如何做到這一點,所以我問你,以幫助我 – Ronycohen
歡迎來到stackoverflow.com。請花些時間閱讀[幫助頁面](http://stackoverflow.com/help),尤其是名爲[「我可以問些什麼話題?」]的章節(http://stackoverflow.com/help/)討論話題)和[「我應該避免問什麼類型的問題?」](http://stackoverflow.com/help/dont-ask)。另請[請閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask),並學習如何創建[最小,完整和可驗證示例](http:// stackoverflow .COM /幫助/ MCVE)。 –