【发布时间】:2022-01-17 01:07:04
【问题描述】:
我正在尝试构建一个函数,它接受一个正整数并用字符串表示它 使用递归。字符串未初始化。
void intToStr(int num, char s[]){
if (num / 10 == 0) {
s[0] = num + '0';
s[1] = '\0';
}
else {
intToStr(num / 10, s);
s[strlen(s)] = num % 10 + '0';
s[strlen(s) + 1] = '\0';
}
}
但我不明白为什么当我运行代码时它会跳过这一行
s[strlen(s) + 1] = '\0';
【问题讨论】:
-
你到底在做什么来决定它跳过那一行?您是在调试器中单步执行代码,还是查看结果,还是什么?
-
我正在调试器中的每一行,我可以在 s 的值中看到它没有“关闭”字符串。 @无用
-
如果您在调试器中单步执行每一行,您可以查看控制是否转移到该行。可以?这与是否具有预期效果不同。当您观察到
s和strlen做错事时返回的值究竟是什么? -
哦,我现在明白你的意思了。它没有跳过该行,而是以错误的逻辑执行它。在 s[strlen(s)] =` num % 10 + '0' 行之后; ` strlen size 连接到内存中的下一个 '\0' 和插入 '\0' 之后的行,因此它不会改变长度。感谢您的帮助!
-
这样反复调用
strlen(s)是个坏主意