gpt4 book ai didi

c - 关于C整数转字符串函数的一些问题

转载 作者:行者123 更新时间:2023-12-02 06:43:49 25 4
gpt4 key购买 nike

在通读 K&R 时,我遇到了整数到字符串 函数。我快速阅读了它,并决定自己实现它,但它不是打印,而是更新字符数组。

这是我的

void inttostr(int number, char str[]) {
static int i;
if (number / 10) {
inttostr(number / 10, str);
}
str[i++] = number % 10 + '0';
}

它似乎适用于我给它的几个整数,但我有一些问题。

  1. 我没有在末尾明确包含 nul 字节 \0,那么为什么使用 printf("%s\n", str); 打印时字符串可以正常工作? ?
  2. 我不认为我很擅长递归思考。当我尝试逐步执行脑海中的程序时,我忘记了仍在等待执行的内容。有没有更好的方法来了解内部发生的事情,以帮助我学习?
  3. 对代码还有其他建议吗?

我正在使用 Xcode。

不是作业。我只是在学习。

谢谢!

最佳答案

你是对的,你从来没有写过 NUL,这是一个错误。

一般来说,您不必考虑整个解决方案。你只需要确保每一步都是正确的。所以在这种情况下,你说:

1 。 inttostr(number/10, str);

将处理除最后一位以外的所有数字。

2。然后我会处理最后一个。

不过,您可以追踪正在发生的事情。例如54321 它看起来像:

inttostr(54321, str); // str = ...;
inttostr(5432, str); // str = ...;
inttostr(543, str); // str = ...;
inttostr(54, str); // str = ...;
inttostr(5, str); // str = ...;
str[0] = '5'; // str = "5...";
str[1] = '4'; // str = "54...";
str[2] = '3'; // str = "543...";
str[3] = '2'; // str = "5432...";
str[4] = '1'; // str = "54321...";

请注意,如果您在写入第一个字符之前没有从任何函数返回,那么您将以与调用相反的顺序返回。

... 表示您没有以 NUL 结尾。另一个问题是您使用的是静态变量,因此您的代码不可重入;这意味着它在某些情况下会中断,包括多线程。

要解决重入和 NUL 问题,您可以执行类似以下代码的操作。这将创建一个辅助函数,并将当前索引传递给 write。

void inttostr_helper(int number, char str[], int *i)
{
if (number / 10) {
inttostr_helper(number / 10, str, i);
}
str[(*i)++] = number % 10 + '0';
str[*i] = '\0';
}

void inttostr(int number, char str[])
{
int i = 0;
inttostr_helper(number, str, &i);
}

编辑:修复了非静态解决方案。

关于c - 关于C整数转字符串函数的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com