【发布时间】:2015-02-19 15:25:31
【问题描述】:
我有一个字符数组:
char tmp[2048];
我想删除 tmp 的前 x 个单词。我将单词定义为不包含空格的字符序列。我试过这样的东西(应该删掉前三个字):
sscanf(tmp, "%*s %*s %*s %s", tmp);
我的问题是,'%s' 在它找到的第一个空格处停止。我希望新字符串在旧字符串的末尾结束,而不是在第一个空格处。
我也愿意接受其他建议如何剪切字符串的前 x 个单词。我将单词定义为不包含空格的字符序列。
【问题讨论】:
-
您为什么不直接使用
std::string,它允许您使用 2 或 3 行代码完成所有这些工作,没有错误、没有内存泄漏和完全的异常安全性?为什么要自己处理原始动态数组? -
你的代码中sscanf的返回值是多少? sscanf 返回参数列表中已填充的项目数。
-
您有什么理由使用
sscanf而不是strcpy或memcpy?您似乎使用了错误的工具来完成这项工作。 -
那使用c++有什么意义呢?确实是错误的工具。
-
如果“兼容性”是指“与 C 的兼容性”,那么请注意,您也不能使用
new和delete。
标签: c