我有一个名为names[50]
的char array
基本上,我使用
strncpy(this->names, names, sizeof(names))
但是,这只会截断末尾的字符。
如何从一开始就截断字符?
例如,BillSteveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge
应该是teveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge
如果我理解正确,那么使用您显示的字符串作为示例,您必须编写
strncpy( this->names, names + 5, sizeof(names) - 5 );
您可以更改 strncpy 的源地址:
strncpy(this->names, &(names[10]), num_of_chars_to_copy);
请注意,如果源字符串的长度超过 num,则不会在目标字符串的末尾隐式追加空字符。
你需要清楚你想做什么... names[] 的长度从调用到调用是可变的吗?这个>名称是固定长度吗?请注意,要复制的字节数的长度应该是此名称中可用的字节数>...否则,您将面临内存溢出的风险。
我为您设计了这个简单的函数,您可以将其用作更复杂的问题的参考代码:
void BackStrCopy(char* src, char* dest, int srcsize, int destsize)
{
if(srcsize >= destsize )
{
do
dest[destsize--] = src[srcsize--];
while( destsize + 1 );
}
}
int main()
{
char* src = "BillSteveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge";
char dest[50];
BackStrCopy(src, dest, strlen(src), 25);
}
我测试了它最终工作。
我认为函数代码不需要任何注释:)如果我的解决方案对您有帮助,请记得检查答案。
再见