从C中的字符串获取子字符串

sdd

我有一个字符串“ abcdefg-this-is-test”,我想删除字符串的前6个字符。这是我正在尝试的:

char contentSave2[180] = "abcdefg-this-is-a-test";
strncpy(contentSave2, contentSave2+8, 4);

到目前为止没有运气,处理器卡住并自行重置。任何帮助将不胜感激。

问题:如何在C中修剪字符串?

//// EDIT /////我也尝试过这个:

memcpy(contentSave2, &contentSave2[6], 10);

不起作用,同样的问题。

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

第一个代码段的问题是它将中间的四个字符复制到字符串的开头,然后停止。

不幸的是,您不能将其扩展为覆盖整个字符串,因为在这种情况下,源缓冲区和输出缓冲区会重叠,从而导致UB:

如果字符串重叠,则行为未定义。

缓冲区重叠是您第二次尝试的问题:memcpy不允许缓冲区重叠,因此行为是不确定的。

如果您只需要删除字符串开头的字符,则根本不需要复制它:只需获取初始字符的地址,然后将其用作新字符串即可:

char *strWithoutPrefix = &contentSave2[8];

要将字符串从一个缓冲区复制到另一缓冲区,请使用memcpy

char middle[5];
memcpy(middle, &contentSave2[8], 4);
middle[4] = '\0'; // "this"

要复制可能重叠的缓冲区,请使用memmove

char contentSave2[180] = "abcdefg-this-is-a-test";
printf("%s\n", contentSave2);
memmove(contentSave2, contentSave2+8, strlen(contentSave2)-8+1);
printf("%s\n", contentSave2);

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章