关于将字符输入到数组
*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;
}
用你的代码可以正常输出520和-1234 chxchxkkk 发表于 2020-7-16 13:13
用你的代码可以正常输出520和-1234
我刚开始的时候不理解str == '-'那一句
因为我之后用了一个printf用来查看str的值
但是最后的结果都是数字
刚刚问过 str中的i在下一句执行i++ 此刻i为0 所以'-'存入了str中
但是我获取的是str才会有错误
已经解决了 谢谢兄弟 对了 这里还有一点不理解的 为什么str 里面的数要加'0'
while (dec != 0)
{
str = num / dec + '0';
num = num % dec;
dec /= 10;
} 为什么这个函数在声明时用了'*'在这里有什么特殊的含义么 你的程序执行完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类型的指针 sunrise085 发表于 2020-7-16 14:21
你的程序执行完41行之后,str中存放的是:'5'、'2'、'0'、'\0'
接下来执行第42行,进入myitoa函数后,执行 ...
懂了 谢谢兄弟
页:
[1]