C 在字符中显示int,并进行一些修改
我目前正在将Csharp程序转换为Unix C。它运行良好,除了: 我有一个包含秒数的整数(秒),出于美观的原因,我想用前零(1->01,等等)来显示它。下面是我编写的代码,它有时有效,有时无效,这取决于调用它的位置。我怀疑问题出在指针上C 在字符中显示int,并进行一些修改,c,string,pointers,char,printf,C,String,Pointers,Char,Printf,我目前正在将Csharp程序转换为Unix C。它运行良好,除了: 我有一个包含秒数的整数(秒),出于美观的原因,我想用前零(1->01,等等)来显示它。下面是我编写的代码,它有时有效,有时无效,这取决于调用它的位置。我怀疑问题出在指针上 char *st_str; if(secs<10) { if(secs==0) st_str = "00"; else if(secs==1) st_str = "01"; else if(secs==2) st_str = "02";
char *st_str;
if(secs<10)
{
if(secs==0) st_str = "00";
else if(secs==1) st_str = "01";
else if(secs==2) st_str = "02";
else if(secs==3) st_str = "03";
else if(secs==4) st_str = "04";
else if(secs==5) st_str = "05";
else if(secs==6) st_str = "06";
else if(secs==7) st_str = "07";
else if(secs==8) st_str = "08";
else if(secs==9) st_str = "09";
}
else
{
sprintf(st_str,"%i",secs);
}
char*st_str;
如果(秒)您可以将零放在格式字符串中并使用sprintf(…)
:
现在请注意,由于您可以在同一语句中概括0-9之间的所有秒数,因此switch语句可能更合适:
str_str = malloc(<max-digits-here>);
switch(secs)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
sprintf(st_str,"0%d",secs);
break;
default:
sprintf(st_str,"%d",secs);
}
str_str=malloc();
开关(秒)
{
案例0:
案例1:
案例2:
案例3:
案例4:
案例5:
案例6:
案例7:
案例8:
案例9:
sprintf(st_str,“0%d”,秒);
打破
违约:
sprintf(圣母大学街,“%d”,秒);
}
您可以将零放在格式字符串中,然后使用sprintf(…)
:
现在请注意,由于您可以在同一语句中概括0-9之间的所有秒数,因此switch语句可能更合适:
str_str = malloc(<max-digits-here>);
switch(secs)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
sprintf(st_str,"0%d",secs);
break;
default:
sprintf(st_str,"%d",secs);
}
str_str=malloc();
开关(秒)
{
案例0:
案例1:
案例2:
案例3:
案例4:
案例5:
案例6:
案例7:
案例8:
案例9:
sprintf(st_str,“0%d”,秒);
打破
违约:
sprintf(圣母大学街,“%d”,秒);
}
当sprintf()
被称为st_str
是未初始化的指针时,代码将经历未定义的行为。st_str
需要指向有效内存
但是,要打印前导零,请使用格式说明符“%02d”
。例如:
char st_str[32];
snprintf(st_str, sizeof(st_str), "%02d", secs);
并避免使用if/else
当sprintf()
被称为st_str
是未初始化的指针时,代码将经历未定义的行为。st_str
需要指向有效内存
但是,要打印前导零,请使用格式说明符“%02d”
。例如:
char st_str[32];
snprintf(st_str, sizeof(st_str), "%02d", secs);
并避免使用if/else
删除较大的if/else结构,并替换为:
sprintf(st_str, "%02d", secs);
您的版本不起作用,因为%i
需要一个int,而您正在向它提供一个指向char的指针。您可以使用%s
来“修复”它,但这对于标准函数可以为您做的事情来说太多了。删除那个大的if/else构造并替换为:
sprintf(st_str, "%02d", secs);
您的版本不起作用,因为%i
需要一个int,而您正在向它提供一个指向char的指针。您可以使用%s
来“修复”它,但这对于标准函数可以为您做的事情来说太多了。如果您想要sprintf()对于st_str,您必须为其分配内存。但是,您所产生的代码绝对是多余的。为什么不直接使用%02d
格式说明符呢?另外,sprintf()
通常被认为是不安全的,请改用snprintf()
:
char st_str[3];
snprintf(st_str, sizeof(st_str), "%02d", secs);
请注意,如果要从函数返回st_str
,则不能使用自动数组,而是应该编写
const size_t size = 3;
char *st_str = malloc(size);
snprintf(st_str, size, "%02d", secs);
如果你想将sprintf()转换成st_str,你必须为它分配内存。但是,你的代码是绝对多余的。为什么不直接使用%02d
格式说明符呢?另外,sprintf()
通常被认为是不安全的,请改用snprintf()
:
char st_str[3];
snprintf(st_str, sizeof(st_str), "%02d", secs);
请注意,如果要从函数返回st_str
,则不能使用自动数组,而是应该编写
const size_t size = 3;
char *st_str = malloc(size);
snprintf(st_str, size, "%02d", secs);
请在下面使用此选项:
if(secs >=0 && secs < 10)
sprintf(st_str,"0%d",secs);
else
sprintf(st_str,"%d",secs);
如果(秒>=0&&secs<10)
sprintf(st_str,“0%d”,秒);
其他的
sprintf(圣母大学街,“%d”,秒);
或者,如果您只想显示,请使用printf(“%02d”,secs)
并直接将其打印到输出屏幕
编辑:但请记住,在sprintf
的情况下,您必须为st_str
分配内存,以保持secs
的值,请使用以下方法:
if(secs >=0 && secs < 10)
sprintf(st_str,"0%d",secs);
else
sprintf(st_str,"%d",secs);
如果(秒>=0&&secs<10)
sprintf(st_str,“0%d”,秒);
其他的
sprintf(圣母大学街,“%d”,秒);
或者,如果您只想显示,请使用printf(“%02d”,secs)
并直接将其打印到输出屏幕
编辑:但请记住,在sprintf
的情况下,您必须为st_str
分配内存才能保留secs
的值,为什么要将其转换为字符串。printf
可以显示带填充的数字
例如
int secs;
for(secs = 0; secs < 60; ++secs)
printf("%02d\n", secs);
为什么要将其转换为字符串。printf
可以显示带填充的数字
例如
int secs;
for(secs = 0; secs < 60; ++secs)
printf("%02d\n", secs);
要打印最少n
位数,可以使用格式设置程序中的精度点,如下所示:
printf(“%.2d”,秒);
您不需要创建字符变量等!要打印最少的n
位数,您可以使用格式化程序中的精度点,如下所示:
printf(“%.2d”,秒);
您不需要创建字符变量等!我认为应该是我认为应该是