将整数值存储在C中的字符数组中

时间:2013-03-09 08:32:04

标签: c char int

这是一个非常微不足道的问题,但我不知道为什么我没有得到正确的输出。这是我想要做的:

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等,但它不起作用。请帮忙

7 个答案:

答案 0 :(得分:6)

您需要将该数字转换为字符。一种廉价的方法是:

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

答案 1 :(得分:2)

printf(%s,sendBuffer);应为printf("%s",sendBuffer);

答案 2 :(得分:2)

更改

sendBuffer[0]=count;

sendBuffer[0]='0' + count;

即。将整数0 ... 9转换为字符'0'...'9'

同时添加引用,即printf("%s",sendBuffer);

答案 3 :(得分:1)

要将整数值转换为char表示,请添加字符“0”的值:

sendBuffer[0]=count + '0';

请注意,字符为'0',而不是数字0.这是因为ascii values的工作方式。文字值为0的char是\0,空终止符。数字'0'的字面值为48,'1'49等等。

这适用于数字0-9。显然,你不能把一个数字的char表示大于单个char中的数字。

答案 4 :(得分:1)

引自问题:

  

在输出中,除第一个缓冲区外,所有缓冲区都正确打印   index.i希望在缓冲区的开头打印1,2,3等等   但它不起作用。请帮忙

我认为她的问题是她没有获得第一行的任何输出。这是因为在第一次迭代中,count为0,即sendBuffer [0]为0,即'\ 0'字符。因此字符串被视为空。

答案 5 :(得分:1)

您正在尝试打印与十进制值0-9相对应的ascii字符,这些字符是不可打印的字符。如果需要打印十进制0-9,则将count初始化为48,这是'0'的ascii十进制代码,并将while块中的条件更改为count&lt; 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;
}

答案 6 :(得分:0)

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);
}