C语言int num到char字符串
我如何获得:C语言int num到char字符串,c,string,int,type-conversion,C,String,Int,Type Conversion,我如何获得: int i = 1023 致: 以下是我尝试的代码: 尝试1 这些输出是否使myString==char myString[4]=“1023” 我真的很困惑如何获得我需要的输出 您需要为myString分配5个元素('1'、'0'、'2'、'3'、'\0') #包括 内部主(空){ int avg_adc=1023; char-myString[5]; sprintf(myString,“%d”,平均adc); printf(“%s\n”,myString); 返回0; }
int i = 1023
致:
以下是我尝试的代码:
尝试1
这些输出是否使myString==char myString[4]=“1023”代码>
我真的很困惑如何获得我需要的输出 您需要为myString分配5个元素('1'、'0'、'2'、'3'、'\0')
#包括
内部主(空){
int avg_adc=1023;
char-myString[5];
sprintf(myString,“%d”,平均adc);
printf(“%s\n”,myString);
返回0;
}
#包括
main()
{
int avg_adc=1023;
char-myString[4];
sprintf(myString,“%d”,平均adc);
printf(“%s”,myString);//您忘了这个。。
}
myString的内存表示形式如下所示:
--- --- --- --- ---
myString: | 1 | 0 | 2 | 3 |\0 |
--- --- --- --- ---
i、 e.char
数组被一个空字符'\0'
终止,您忘记为其分配内存
在代码中,如果要存储int avg_adc=1023
,您应该考虑一个额外的字符
,并将数组定义为:
char myString[5];
根据ISO C11草案n1570:
sprintf
函数返回数组中写入的字符数,
不计算终止的空字符,如果
发生编码错误
换句话说,的返回值
sprintf(myString, "%d", 1023);
确实是4,但它实际上将5个字符写入myString
。snprintf
提供了更多信息,它限制了写入指定值的字符数,该数字应说明终止的空字符:
因此,当且仅当已完全写入以null结尾的输出
如果返回值为非负且小于[指定限制]
换句话说,您需要检查snprintf
的返回值。如果测试失败,那么结果字符串将被截断,并且它需要比返回值大一个字符,以适合您希望它存储的所有字符(假设未返回负值)。声明charmystring[5]代码>产生以下输出:
OK :-)
“1023”是一个五符号字符串。您在堆栈上只分配了四个。这是什么意思?你的代码没有输出任何东西。是的,我在排除故障时意识到了这一点。我最终选择了另一种方法,但我感谢您的帮助。如果您自己的解决方案解决了此问题,您可以将其作为答案添加(和)。如果此答案有用,请接受此答案您正在将一个5个字符的字符串存储在一个4个字符的数组中。但是,问题会询问为什么没有输出。问题中没有输出函数确实解释了…@NisseEngström运行它,这个程序在告诉任何事情后都能提供完美的输出…谢谢你,我最终选择了另一种方法,但我感谢你的帮助。我知道我很接近。。rip@Arch当然没问题。如果有帮助,你应该接受答案。
#include <stdio.h>
main()
{
int avg_adc = 1023;
char myString[4];
sprintf(myString, "%d", avg_adc);
printf("%s",myString); //you forgot this..
}
--- --- --- --- ---
myString: | 1 | 0 | 2 | 3 |\0 |
--- --- --- --- ---
char myString[5];
sprintf(myString, "%d", 1023);
int avg_adc = 1023;
char myString[4];
int charsWritten;
charsWritten = snprintf(myString, sizeof(myString), "%d", avg_adc);
if (charsWritten >= 0 && charsWritten < sizeof(myString)) {
printf("OK :-)\n");
} else {
printf("TROUBLE :-(\n");
printf("Returned: %d\n", charsWritten);
printf("myString=%s, expected %d\n", myString, avg_adc);
}
TROUBLE :-(
Returned: 4
myString=102, expected 1023
OK :-)