如何截断C char *?

时间:2011-06-25 20:50:30

标签: c string char

就这么简单。我正在使用C ++ btw。我已经阅读了cplusplus.com的cstdlib库函数,但是我找不到一个简单的函数。 我知道char的长度,我只需要擦除最后三个字符。我可以使用C ++字符串,但这是用于处理使用char *的文件,我不希望从字符串转换为C char。

5 个答案:

答案 0 :(得分:23)

如果您不需要将字符串复制到其他地方并且可以更改它

/* 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;

答案 1 :(得分:6)

我认为你的一些帖子在翻译中丢失了。

要在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;
}

答案 2 :(得分:4)

如果知道字符串的长度,可以使用指针算法来获取最后三个字符的字符串:

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

const char* substring = mystring + len - 3;

请注意,substring指向与mystring相同的内存,只有mystring有效且保持不变才有效。这样做的原因是c字符串在开头没有任何特殊标记,只有NULL终止。

我将你的问题解释为想要最后三个字符,摆脱起点,而不是David Heffernan如何阅读它,我们其中一个人显然是错的。

答案 3 :(得分:0)

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

我假设改变字符串内存是安全的,因为你确实说过 erase 最后三个字符。我只是用“NULL”或0覆盖最后三个字符。

答案 4 :(得分:0)

了解C char*“字符串”如何工作可能会有所帮助:

你开始从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.