题主在做c语言作业时(写一个函数将十进制数转换为二进制并储存在数组中进行输出),发现,若用for循环(%d)输出没有问题,但在使用字符串直接输出(%s)时,并不会输出东西。则数组中必然是储存了数但是在进行字符串输出时有问题。
源代码忽略,此处进行简化,即:
#include<stdio.h>
int main()
{
char arr[9];
//创建一个数组,储存0~7并用for循环(%d)进行输出
//此时没有问题
for (int i = 0; i < 8; i++)
{
arr[i] = i;
}
for (int i = 0; i < 8; i++)
{
printf("%d", arr[i]);
}
}
//输出结果:01234567
但若使用%s进行字符串输出:
#include<stdio.h>
int main()
{
char arr[9];
for (int i = 0; i < 8; i++)
{
arr[i] = (char)i; //将储存的数进行强制类型转换,转换为char
}
printf("%s", arr);
}
//不输出东西
其实只是一个小错误——在将整型转换为字符型时不能直接使用强制类型转换,整型会被转换为整型值所对应的ascll码表上的相应字符,即0转换为'\0',1转换为SOH......
因此,在对整型到字符型进行转换时,要加上相应值以使之对应
修改后如下,在i前加上'0':
#include<stdio.h>
int main()
{
char arr[9];
for (int i = 0; i < 8; i++)
{
arr[i] = (char)'0' + i;
}
arr[8] = '\0'; //添加一个终止符
printf("%s", arr);
}
//输出结果:01234567
则输出正常。
综上,我们在进行强制类型转换时要注意其值和字符是否在转换后仍然对应