比strncpy更好地复制字符阵列的部分方法



我使用C 98中的std::strncpy将char数组的一部分复制到另一个char数组。似乎需要手动添加结尾字符'',以正确终止字符串。

如下,如果不明确将''附加到num1,则char数组可能在后面的其他部分中具有其他字符。

  char buffer[] = "tag1=123456789!!!tag2=111222333!!!10=240";
  char num1[10];
  std::strncpy(num1, buffer+5, 9);  
  num1[9] = '';

有比这更好的方法吗?我想进行一步操作来达到这个目标。

是的,在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-enult-entination num1。只有在以后要将其视为C风格的字符串时,才是所需的。如果您只是认为它是10个字节的数组,那么一切仍然可以。

相关内容

  • 没有找到相关文章

最新更新