gpt4 book ai didi

c - 尝试了解这个字符串到整数函数的工作原理

转载 作者:行者123 更新时间:2023-11-30 20:20:22 25 4
gpt4 key购买 nike

我一直在试图弄清楚如何将输入的字符串转换为整数。我在网上找到了这个功能的代码:

 int toString(char a[]) {
int c, sign, offset, n;
if (a[0] == '-') { // Handle negative integers
sign = -1;
}
if (sign == -1) { // Set starting position to convert
offset = 1;
}
else {
offset = 0;
}
n = 0;
for (c = offset; a[c] != '\0'; c++) {
n = n * 10 + a[c] - '0';
}
if (sign == -1) {
n = -n;
}
return n;
}

链接 here该代码有效,但我不太明白为什么。具体来说,我不明白这部分是如何工作的:

      n = 0;
for (c = offset; a[c] != '\0'; c++) {
n = n * 10 + a[c] - '0';
}

如果 n = 0,将其乘以 10 对结果有何影响?另外,如果限制因素是 a[c] != '\0',for 循环如何结束? a[c] 怎么会等于 null?

任何帮助将不胜感激

最佳答案

the code works [...]

不,不是,因为 sign 未初始化,但在字符串不以 - 开头时使用。从技术上讲,该代码具有未定义的行为

请忘记该网站;它的质量很低,不会教你正确的 C 编程。例如。这些是 clang 产生的警告:

$ cc -c -Wall x.c
x.c:4:7: warning: variable 'sign' is used uninitialized whenever 'if' condition is false
[-Wsometimes-uninitialized]
if (a[0] == '-') { // Handle negative integers
^~~~~~~~~~~
x.c:8:7: note: uninitialized use occurs here
if (sign == -1) { // Set starting position to convert
^~~~
x.c:4:3: note: remove the 'if' if its condition is always true
if (a[0] == '-') { // Handle negative integers
^~~~~~~~~~~~~~~~~
x.c:2:14: note: initialize the variable 'sign' to silence this warning
int c, sign, offset, n;
^
= 0
1 warning generated.

任何声称教授 C 的网站都必须使用没有警告的示例(除非代码的目的是演示错误)。

您是否意识到函数名称 toString 的顺序颠倒了?它应该是 fromStringtoInteger。该网站的质量保证很差。

关于c - 尝试了解这个字符串到整数函数的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46394173/

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