c - 在 C 中的一个命令中将字符串的一部分转换为 int
问题描述
我有一个长字符串,我知道整数的开始和结束的位置。我想提取整数并将其存储在变量中。这就是我现在可以做到的。
//MY_STRING, INT_START, INT_END are the string, start
//position of the int and end position respectively.
char * temp;
strncpy(temp, MY_STRING+INT_START, INT_END-INT_START);
int n = atoi(temp);
问题是我可以在一行中执行此操作,而不是使用临时字符串吗?
解决方案
我可以在一行中执行此操作,而不是使用临时字符串吗?
用于sscanf()
快速脏不temp
。
int n;
// v--- scan width limit
// | v---------------v
if (sscanf(MY_STRING + INT_START, "%*d", INT_END-INT_START, &n) == 1) {
puts("Success");
}
更好的代码会考虑溢出问题。
OP 的代码不好,因为temp
它不一定指向一个字符串。它可能缺少空字符。
strncpy(temp, MY_STRING+INT_START, INT_END-INT_START);
int n = atoi(temp); // bad
推荐阅读
- api - Laravel 从 localhost 上的另一个 API 调用 API
- typescript - 如何检查字符串是否仅包含空格或在 TypeScript 中为空?
- reactjs - 如何将已删除的列表从数组推送到reactjs中的空数组
- pyspark - 在 Python 中与此等效的 Spark 是什么:VAR_NAME = DF['VAR_NAME']
- android - 为什么configurations.all { conf:Configuration -> ... }编译错误:类型不匹配:推断类型为单位但预期布尔值
- postgresql - 调用存储过程并返回 ID
- python - 如何显示给定时区时钟变化的实际时间
- c++ - 标准::向量
不会在 C++ 中自动释放内存 - python - PyQt4 中的安装和导入问题
- javascript - 如何为每个组件实例的元素分配唯一 ID