簡體   English   中英

如何截斷C char *?

[英]How to truncate C char*?

就如此容易。 我正在使用C ++ btw。 我已經閱讀了cplusplus.com的cstdlib庫函數,但是我找不到一個簡單的函數。 我知道char的長度,我只需要刪除它的最后三個字符。 我可以使用C ++字符串,但這是用於處理使用char *的文件,我不想從字符串轉換為C char。

如果您不需要將字符串復制到其他位置並且可以更改它

/* make sure strlen(name) >= 3 */
namelen = strlen(name); /* possibly you've saved the length previously */
name[namelen - 3] = 0;

如果你需要復制它(因為它是一個字符串文字,或者你想保留原文)

/* make sure strlen(name) >= 3 */
namelen = strlen(name); /* possibly you've saved the length previously */
strncpy(copy, name, namelen - 3);
/* add a final null terminator */
copy[namelen - 3] = 0;

我認為你的一些帖子在翻譯中丟失了。

要在C中截斷字符串,只需在所需位置插入一個終止空字符即可。 然后,所有標准函數都將字符串視為具有新長度。

#include <stdio.h>
#include <string.h>

int main(void)
{
    char string[] = "one one two three five eight thirteen twenty-one";

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

    string[strlen(string) - 3]  = '\0';

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

    return 0;
}

如果知道字符串的長度,可以使用指針算法來獲取最后三個字符的字符串:

const char* mystring = "abc123";
const int len = 6;

const char* substring = mystring + len - 3;

請注意, substring指向與mystring相同的內存,只有mystring有效且保持不變才有效。 這樣做的原因是ac字符串在開頭沒有任何特殊標記,只有最后的NULL終止。

我把你的問題解釋為想要最后三個字符,擺脫起點,而不是David Heffernan如何讀它,我們其中一個人顯然是錯的。

bool TakeOutLastThreeChars(char* src, int len) {
  if (len < 3) return false;
  memset(src + len - 3, 0, 3);
  return true;
}

我假設改變字符串內存是安全的,因為你說刪除最后三個字符。 我只是用“NULL”或0覆蓋最后三個字符。

它可能有助於理解C char* “strings”的工作原理:

你開始從char *指向的char中讀取它們,直到你達到\\0 char(或簡稱為0)。

所以,如果我有

char* str = "theFile.nam";

然后str+3表示字符串File.nam

但是你想刪除最后三個字符,所以你需要這樣的東西:

char str2[9];
strncpy (str2,str,8); // now str2 contains "theFile.#" where # is some character you don't know about
str2[8]='\0'; // now str2 contains "theFile.\0" and is a proper char* string.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM