- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试重新编码 itoa 函数,给定一个 int,它将返回一个表示其十进制值的字符串。到目前为止,这些功能运行良好:
char *ft_itoa(int n)
{
char s[1024];
int i;
int neg;
i = 0;
neg = 0;
if (n == 0)
s[i++] = '0';
if (n < 0)
{
n = n * (-1);
neg = 1;
}
while (n != 0)
{
s[i++] = (n % 10) + 48;
n /= 10;
}
if (neg)
s[i++] = '-';
s[i] = '\0';
return (ft_strrev(s));
}
除了最小的 int 值,-2147483648。在这种情况下,该函数返回:
"-./,),(-*,("
这很……奇怪。请注意,ft_strrev 将反转结果并将其 malloc。有什么线索吗?
编辑:
这里有非常有趣的答案。我对缓冲区的最小大小特别感兴趣。使用 limits.h 似乎可以解决问题,但不允许包含除 stdlib.h 和 string.h 之外的其他 header 。我也被限制在三个功能上,malloc,free和write。但是,我确实重新编写了 strdup 和 libc 中的许多函数。
有人可以解释为什么该行会声明我需要的确切内存量:
char buf[sizeof(int) * CHAR_BIT / 3 + 3];
此外,
Using unsigned to compute the digits would avoid the problem with INT_MIN. Bug fix for INT_MIN.
为什么?
最佳答案
您的代码有几个小问题:
缓冲区太大:包括符号和空终止符,24 个字节应该足够了。对于绝对可移植性,sizeof(int)*CHAR_BIT/3 + 3
的上限是正确的。 不是错误,而是浪费。
如果将数字从右到左存储到缓冲区中,则不需要最后的反相,可以直接调用strdup()
。 更简单、更快速。
使用 unsigned
计算数字可以避免 INT_MIN 的问题。 INT_MIN 的错误修复。
循环获取 i >= 10
并单独存储最后一位数字可以避免 0
的特殊情况。 更简单、更快、更少的部门。
您应该使用 '0'
而不是硬编码 ASCII 值 48
。 更具可读性和便携性。
修改后的版本:
#include <limits.h>
char *ft_itoa(int n) {
char buf[sizeof(int)*CHAR_BIT/3 + 3];
char *s;
unsigned int v;
v = n;
if (n < 0) {
v = -v;
}
s = buf + sizeof(buf);
*--s = '\0';
while (v >= 10) {
*--s = '0' + v % 10;
v /= 10;
}
*--s = '0' + v;
if (n < 0)
*--s = '-';
return strdup(s);
}
如果 strdup
在您的系统上不可用,如果您从堆中分配字符串,它很容易实现并且非常有用。
关于c - 重新编码 itoa : error on minimum int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167437/
我是 Haskell 术语的初学者。我必须做一个显示所有最低位置的练习。 例如: [1,2,3,1,1] => 0,3,4 这些是最小位置。 我尝试用两种方法来做到这一点,但这些都不起作用。 请有人帮
我需要找到整个矩阵的最小值,它是“坐标”。在像 这样的矩阵中 matrix = 8 7 6 5 4 3 2 1 最小值为 (2, 4) 处的 1。 最佳答案 这可以很简单地通过使用
给定一个正整数“l”和“r”。找到最小的数字“n”,使得 l r: cnt = 32 for i in range(l, r+1): s = bi
numpy.minimum 似乎不适用于复数: np.minimum(5+3*1j,4+30*1j) (4+30j) 我想保持最大幅度的值。它只比较实部。元素最小比较的任何其他功能? MATLAB m
鉴于数据库中的以下事实: foo(a, 3). foo(b, 2). foo(c, 4). foo(d, 3). foo(e, 2). foo(f, 6). foo(g, 3). foo(h, 2).
假设我们给出了给定图 G 的最小生成树 T(有 n 个顶点和 m 个边)和一条权重为 w 的新边 e = (u, v),我们将添加到 G 中。 I) 检查 T 是否仍然是 MST。II) 如果不是,请
我有一个名为“posts”的elasticsearch索引。 http://127.0.0.1:9200/posts/doc/_count返回{"count":240000,"_shards":{"t
我在 MySQL 中有一个表,名称如下 我有两件事要处理 1- 停用所有未使用的书籍 isActive = 1 - Active isActive = 0 - Inactive is_inuse =
我的站点位于 www.ethoma.com/wd/ . 如您所见,我已经使用自己的代码实现了主题和所有菜单。我想在我的网站上安装 WordPress,这样我就可以简单地在 WordPress 上输入我
当我在 bool 数组上使用 numpy 函数 minimum() 和 maximum() 时,结果类型打印为 numpy.int32。但是,与 numpy.int32 类型的比较失败(即使在转换之后
我在分布式系统中遇到分片移动问题。 【问题】 最初每个分区负责任意数量的分片。 (这个数字可以是任意的,因为系统支持将分片从一个分区移动到另一个分区) 然后一个新的分区来了,系统需要重新分片。目标是使
我有 3 个这样的观点: 我需要定义一个约束,以便在蓝色或芥末色垂直调整大小时,红色 View 将保持在任一上 View 的最小距离处,例如 或者 那么我怎样才能达到那个结果呢??? 最佳答案 建立从
题目地址:https://leetcode.com/problems/minimum-area-rectangle/description/ 题目描述 Given a set of points
题目地址:https://leetcode-cn.com/problems/path-with-minimum-effort/ 题目描述 你准备参加一场远足活动。给你一个二维 rows x col
题目地址:https://leetcode.com/problems/minimum-absolute-difference/ 题目描述 Given an array of distinct in
题目地址:https://leetcode.com/problems/minimum-height-trees/description/ 题目描述 Fora undirected graph wi
题目地址:https://leetcode.com/problems/minimum-time-difference/description/ 题目描述: Given a list of 24-h
题目地址: https://leetcode.com/problems/minimum-genetic-mutation/description/ 题目描述 Agene string can be
你们能帮我解决一些我被困的家庭作业问题吗? 完整二叉树中的局部最小值被定义为小于其所有邻居(邻居 = 父、左子、右子)的节点。 我需要在给定的完整二叉树中找到一个局部最小值,它的每个节点都有不同的数字
(defun *smaller* (x y) ( if (> x y) y x)) (defun *minimum* (lst) (do ((numbers lst (cdr
我是一名优秀的程序员,十分优秀!