c语言字符数组输出不了东西(储存数字)

文章讲述了在C语言中,将十进制数转换为二进制并存储在字符数组中进行输出时,遇到的问题。使用%d格式输出正常,但%s格式输出空白,原因是整型到字符型转换时未加前缀0,需加上相应值使整型对应字符。
摘要由CSDN通过智能技术生成

        题主在做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

则输出正常。

综上,我们在进行强制类型转换时要注意其值和字符是否在转换后仍然对应

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值