【发布时间】:2013-10-17 19:52:58
【问题描述】:
我有一段遗留代码有 char* 用于 if-then-else 逻辑流的函数参数。例如:
void myFunc(char *f_reset) {
.....
.....
if(*f_reset) {// do this;}
else {// do that;}
}
假设我从main() 拨打myFunc(char *f_reset)
void main(void) {
char r = 0;
char *f_reset = &r;
*f_reset = 0;
myFunc(f_reset); // Debug and enter this function
}
当我尝试进入函数调用时,我发现 *f_reset 从未被评估为 0 即 false - 由于一些垃圾 -8342345825 或类似的东西,它始终为 true。
它使用char* 的原因可能是因为在过去,布尔值比字符 * 占用更多的内存?我过去在 Stackoverflow 帖子中读到的一些内容。
有人能给我一个关于char*和逻辑真假之间关系的虚拟指南吗?
【问题讨论】:
-
零字面量 '0' 不计算为零/假?
-
试试
'\0',或者干脆0。 -
@Shaggi 不,它没有。我用过'H','L','h','l',但什么也没用。如果您使用基于
char *的 if-then-else 编写一个快速的小程序并对其进行调试,它将向您显示 ascii 编号,而不是您想要的。是不是很沮丧? -
@WhozCraig 我确定 0 不起作用。我很确定。
-
好吧,那你就错了,而且很确定。
char ar[2], *p = ar; *p = 0; if (*p){} else{}将不执行 if 块。*p等于错误。除了全零八位字节之外的任何内容都等于真。也许发布一个编译并演示您的问题的真实示例可能会有所帮助?
标签: c char boolean char-pointer