我在c++98中使用std::strncpy
将char数组的一部分复制到另一个char数组。它似乎需要手动添加结束字符'\0'
,以便正确终止字符串。
如下所示,如果没有明确地将'\0'
附加到num1
,则char数组可能在后面的部分中包含其他字符。
char buffer[] = "tag1=123456789!!!tag2=111222333!!!10=240";
char num1[10];
std::strncpy(num1, buffer+5, 9);
num1[9] = '\0';
有比这更好的方法吗?我希望通过一步操作来实现这一目标。
答案 0 :(得分:3)
是的,在C中使用“字符串”是相当冗长的,不是吗!
幸运的是,C ++并不局限于此:
const char* in = "tag1=123456789!!!tag2=111222333!!!10=240";
std::string num1{in+5, in+15};
如果你不能使用std::string
,或者不想使用,那么只需将你描述的逻辑包装到函数中,然后调用该函数。
如下所示,如果没有明确地将'\ 0'附加到num1,则char数组可能在后面的部分中包含其他字符。
不太正确。没有“后期部分”。你认为你观察到的“后期部分”是你无权查看的记忆的其他部分。由于未能终止你想成为的C字符串,你的程序有未定义的行为并且计算机本可以做任何事情,比如回到过去并谋杀我曾经的曾祖母。非常感谢,朋友们!
值得注意的是,因为它的C库函数执行了超出范围的内存访问,如果你没有以这种方式使用这些库函数,那么你就不会需要 null-terminate num1
。只有当您希望以后将其视为C风格的字符串时才需要。如果你只是认为它是一个10字节的数组,那么一切都还可以。