从C字符串中删除第一个和最后一个字符

igu*_*222 26 c string c-strings

我有一个看起来像的C字符串"Nmy stringP",其中N和P可以是任何字符.如何"my string"在C中编辑它?

pmg*_*pmg 55

要将第一个字符点"删除"到第二个字符:

char mystr[] = "Nmy stringP";
char *p = mystr;
p++; /* 'N' is not in `p` */
Run Code Online (Sandbox Code Playgroud)

要删除最后一个字符,请将其替换为'\ 0'

p[strlen(p)-1] = 0; /* 'P' is not in `p` (and it isn't in `mystr` either) */
Run Code Online (Sandbox Code Playgroud)

  • @Suppressingfire:"Nmy stringP"确实是一个文字字符串,但它被复制(char by char)到数组`mystr`.数组`mystr`是可修改的. (9认同)
  • 这可能不起作用,因为通过将"Nmy stringP"初始化为文字,编译器/链接器可以将其放在只读内存中,从而导致编辑失败. (4认同)
  • mystr不是指针,它是用字符串文字的内容初始化的数组.他的代码是正确的. (4认同)
  • 文字字符串被复制到名为"mystr"的变量的位置.mystr是_not_指向文字的指针,它是文字的副本. (3认同)

Ste*_*sop 11

另一种选择,再次假设"编辑"意味着您要在适当的位置进行修改:

void topntail(char *str) {
    size_t len = strlen(str);
    assert(len >= 2); // or whatever you want to do with short strings
    memmove(str, str+1, len-2);
    str[len-2] = 0;
}
Run Code Online (Sandbox Code Playgroud)

这会修改字符串,而不会像pmg的解决方案那样生成新地址.并不是说pmg的答案有什么问题,但在某些情况下并不是你想要的.