Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言int num到char字符串_C_String_Int_Type Conversion - Fatal编程技术网

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 :-)