hanianshao 发表于 2020-7-16 12:25:39

关于将字符输入到数组

*myitoa函数中if (num < 0)
{
str = '-';
num = -num;
}

此刻i == 1 所以str内存储的值应该是'-'但是在取值时我发现str == 50 str == 45 str == 48
在我使用printf("%d\n", str);时输出的是上面的数据 当我将%d改为%s时程序直接罢工了 这是什么原因?
#include <stdio.h>

char *myitoa(int num, char *str);

char *myitoa(int num, char *str)
{
      int dec = 1;
      int i = 0;
      int temp;

      if (num < 0)
      {
                str = '-';
                num = -num;
      }

      temp = num;

      while (temp > 9)
      {
                dec *= 10;
                temp /= 10;
      }

      while (dec != 0)
      {
                str = num / dec + '0';
                num = num % dec;
                dec /= 10;
      }

      str = '\0';

      return str;
}

int main(void)
{
      char str;

      printf("%s\n", myitoa(520, str));
      printf("%s\n", myitoa(-1234, str));

      return 0;
}

chxchxkkk 发表于 2020-7-16 13:13:52

用你的代码可以正常输出520和-1234

hanianshao 发表于 2020-7-16 13:31:38

chxchxkkk 发表于 2020-7-16 13:13
用你的代码可以正常输出520和-1234

我刚开始的时候不理解str == '-'那一句
因为我之后用了一个printf用来查看str的值
但是最后的结果都是数字
刚刚问过 str中的i在下一句执行i++ 此刻i为0 所以'-'存入了str中
但是我获取的是str才会有错误
已经解决了 谢谢兄弟

hanianshao 发表于 2020-7-16 13:54:44

对了 这里还有一点不理解的 为什么str 里面的数要加'0'
while (dec != 0)
      {
                str = num / dec + '0';
                num = num % dec;
                dec /= 10;
      }

hanianshao 发表于 2020-7-16 13:57:57

为什么这个函数在声明时用了'*'在这里有什么特殊的含义么

sunrise085 发表于 2020-7-16 14:21:18

你的程序执行完41行之后,str中存放的是:'5'、'2'、'0'、'\0'
接下来执行第42行,进入myitoa函数后,执行if语句,然后str被修改为 '-',而此时后面的单元还没有改变,依然是 '2'、'0'、'\0' 。这是你查看这几个单元的值时,看到的ASCII码分别是str=45, str=50, str=48 str=0
当你执行完下面的第二个while循环后,str的各个单元才被改为"-1234\0"
str = num / dec + '0'
这是把数字转为对应的ASCII码值,将每个数字加上0的ASCII值就变成了对应的ASCII码值了,例如:1+'0'就是1+48=49,即'1'的ASCII值
函数声明中,char *myitoa(int num, char *str) 前面的char*是说函数的返回值是char类型的指针,即函数最后的return内容为char类型的指针;括号内的是函数的两个参数,一个是int类型的变量,一个是char类型的指针

hanianshao 发表于 2020-7-17 17:51:56

sunrise085 发表于 2020-7-16 14:21
你的程序执行完41行之后,str中存放的是:'5'、'2'、'0'、'\0'
接下来执行第42行,进入myitoa函数后,执行 ...

懂了 谢谢兄弟
页: [1]
查看完整版本: 关于将字符输入到数组