我有一个字符串“ 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);
不起作用,同样的问题。
第一个代码段的问题是它将中间的四个字符复制到字符串的开头,然后停止。
不幸的是,您不能将其扩展为覆盖整个字符串,因为在这种情况下,源缓冲区和输出缓冲区会重叠,从而导致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] 删除。
我来说两句