怎么解决c51混合编程时调用printf报错?sprintf也会

 我来答
l7722526
2019-11-10 · TA获得超过2.7万个赞
知道大有可为答主
回答量:2.8万
采纳率:84%
帮助的人:3888万
展开全部
C标准没有输出二进制的,不过用itoa()可以实现到二进的转换。
1、在C语言程序中,可以使用标准库函数中printf()来向屏幕输出信息,或者使用sprintf()向缓冲区输出信息。对整数而言,可以使用%d、%o、%x(或%X)输出十进制形式、八进制、十六进制形式,但貌似缺乏二进制形式。
2、解决方式有两种,一种是利用Windows提供的itoa()函数,另一种自行设计一个新的函数:
代码一:
/** Test.h */
#pragma once

#ifndef Test_H
#define Test_H

/** use itoa() to print integers in the form of binary
* @param[in] n the integer to print
* @return void
*/
void printBinaryByItoa(unsigned int n);
代码二:

/** Test.c */
#include <stdio.h>
#include <stdlib.h>

void printBinaryByItoa(unsigned int n)
{
unsigned char data[33];

_itoa_s(n, data, 33, 2);

printf("%sb\n", data);
}

void printBinary(unsigned int n, unsigned char separator, unsigned char needPrefixZeros)
{
unsigned int i = 0;
unsigned int mask = 0; /* the mask code to get each bit of n */
unsigned char data[40]; /* the buffer to store the bits of n in the form of characters */
unsigned int index = 0; /* used to access data[] */
unsigned int start = 0; /* to point out where and when to store bits of n */

data[39] = '\0';
智者总要千虑
高粉答主

2019-11-10 · 说的都是干货,快来关注
知道顶级答主
回答量:7.9万
采纳率:88%
帮助的人:1.4亿
展开全部
DATA区的RAM使用太多了,错误信息说DATA溢出了。
113个字节就溢出,看样子,你用的是89C51,你把使用的芯片改成89C52就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式