为什么这个C程序的输出为零?

时间:2016-09-12 02:49:53

标签: c string pointers output

请有人详细解释此代码以及为什么会出现0

源代码:

#include<stdio.h>
void main(){
char *str="Hello";
char *ptr = str;
char least =127;
while (*ptr++)
    least = ((*ptr)<(least))?(*ptr):(least);
printf("%d", least);
}

输出:

0

2 个答案:

答案 0 :(得分:4)

您似乎正在尝试在字符串中找到最小的ASCII值。

代码的问题在于while()循环忽略字符串的第一个字节,而是查看'\0'字符串结束标记。您想要做的是在比较least之前退出循环

请改为尝试:

while (*ptr) {
    least = ((*ptr)<(least))?(*ptr):(least);
    ptr++;
}

答案 1 :(得分:1)

所有问题都是由混淆引起的 - 尝试编写一个尽可能复杂的简单算法(编程错误)。这不仅会导致上述错误,还会降低可读性和性能。

如果您尝试编写简单的算法尽可能简单(良好的编程),那么就没有问题,代码执行速度也会更快:

#include <stdio.h>
#include <limits.h>

int main (void)
{
  const char* str="Hello";
  char least = CHAR_MAX;

  for(size_t i=0; str[i] != '\0'; i++)
  {
    if(str[i] < least)
    {
      least = str[i];
    }
  }

  printf("%c = %d", least, least);
}