这是我的问题: 我想缩短一个字符串,但一开始。例如" string"应该" tring"或者"帮助"应该成为" elp"。 它只需要是第一个字母。
有什么想法吗? 谢谢! =)
答案 0 :(得分:8)
无论
string++; /* Updates the pointer. */
或(假设string
在可写内存中)
memmove(string, string+1, strlen(string)); /* Updates memory, including NUL character. */
答案 1 :(得分:2)
char* string = "hello";
char* string2 = string + 1;
printf("%s\n", string2); //prints "ello"
答案 2 :(得分:2)
<强> 1。动态分配内存 如果您准备保留原始字符串(为了释放任何内存),您可以使用
char* foo = string + 1;
但是必须保持原始指针以释放内存。 foo - 1
恢复原始指针,但很难看。
您也可以将字符串内容移回内存中的一个位置,但这将是O(N),但至少您不会更改指针值,因此性能损失可能值得程序稳定性的增益。甚至认为关于使用strcpy
,因为只有在内存不相交时才有效:请改用memmove
。
<强> 2。只读文字
如果字符串是通过const char* string = "hello";
之类的东西出现的,那么你可以定义
const char* foo = string + 1;
将不泄漏内存。
答案 3 :(得分:1)
str2 = strcpy(str2,&amp; str [1]);
或
str2 = strncpy(str2,&amp; str [1],strlen(str) - 1);
答案 4 :(得分:0)
如果您想节省内存,可以尝试使用memmove(3)
,如下所示:
char *string = "Hello\0";
memmove(string, string + 1, strlen(string));
这会将“ello \ 0”移动到之前“Hello”的位置。因此,您只使用相同的内存空间,不要使用任何额外的内容。