将整数值存储在C中的字符数组中
这是一个非常微不足道的问题,但我不知道为什么我没有得到正确的输出。 这是我想要做的:
char sendBuffer[1000]; int count=0: while(count<10) { sendBuffer[0]=count; sendBuffer[1]='a'; sendBuffer[2]='b'; sendBuffer[3]='c'; sendBuffer[4]='\0'; printf(%s,sendBuffer); count=count+1; }
在输出中,除第一个索引外,所有缓冲区都正确打印。 我希望在缓冲区的开头打印1,2,3等等,但它不起作用。 请帮忙
您需要将该数字转换为字符。 一个便宜的方法是:
sendBuffer[0] = '0' + count;
无论如何要显示大于9的整数
如果您需要,您将需要转向更精细的方案。 例如,如果要将整数42转换为字符串“42”,您可以说:
#define ENOUGH ((CHAR_BIT * sizeof(int) - 1) / 3 + 2) char str[ENOUGH]; snprint(str, sizeof str, "%d", 42);
ENOUGH
信用去了caf 。
printf(%s,sendBuffer);
应该是printf("%s",sendBuffer);
更改
sendBuffer[0]=count;
至
sendBuffer[0]='0' + count;
即将整数0 … 9转换为字符’0’…’9′
另外添加一个引用即printf("%s",sendBuffer);
引自问题:
在输出中,除第一个索引外,所有缓冲区都正确打印。我希望1,2,3等在缓冲区的开头打印,但它不起作用。 请帮忙
我认为她的问题是她没有获得第一行的任何输出。 这是因为在第一次迭代中,count为0,即sendBuffer [0]为0,即’\ 0’字符。 因此字符串被视为空。
您正在尝试打印与十进制值0-9对应的ascii字符,这些字符是不可打印的字符。 如果需要打印十进制0-9,则将count初始化为48,即’0’的ascii十进制代码,并将while块中的条件更改为<58; 57是'9'的ascii deciaml代码。 见下文:
char sendBuffer[1000]; int count=48: while(count<58) { sendBuffer[0]=count; sendBuffer[1]='a'; sendBuffer[2]='b'; sendBuffer[3]='c'; sendBuffer[4]='\0'; printf(%s,sendBuffer); count=count+1; }
要将整数值转换为char表示,请添加字符“0”的值:
sendBuffer[0]=count + '0';
请注意,字符为'0'
,而不是数字0.这是因为ascii值的工作原理。 文字值为0的char是\0
,空终止符。 数字’0’的字面值为48,’1’49等等。
这适用于数字0-9。 显然,你不能在一个char中放置一个大于该数字的char表示。
char sendBuffer[1000]; // take fixed stuff outside the loop sendBuffer[1]='a'; sendBuffer[2]='b'; sendBuffer[3]='c'; sendBuffer[4]='\0'; // it's best not to rely on order of ASCII values for(char* numbers="0123456789"; *numbers!=0; numbers++){// use for loop for numbers sendBuffer[0] = *numbers; printf("%s",sendBuffer); }