如何截断C char*?

era*_*ros 10 c string char

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

pmg*_*pmg 25

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

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

如果你需要复制它(因为它是一个字符串文字,或者你想保留原文)

/* 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;
Run Code Online (Sandbox Code Playgroud)


the*_*337 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;
}
Run Code Online (Sandbox Code Playgroud)


And*_*bel 5

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

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

const char* substring = mystring + len - 3;
Run Code Online (Sandbox Code Playgroud)

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

我将你的问题解释为想要最后三个字符,摆脱开头,而不是大卫赫弗南如何阅读它,我们中的一个人显然是错误的。