[英]Why does strlen() counts this wrong?
我试图找到一种计算整数位数的方法(例如 01 有 2 位数)我认为将整数转换为字符串然后使用 strlen() 会有所帮助,但它没有。 我怎样才能实现我的目标?
int main()
{
int someInt = 01;
char str[12];
sprintf(str, "%d", someInt);
printf("%d",strlen(str));
}
当 C 编译器编译您的程序时,您的 C 源代码中存在的许多信息都丢失了。 永远。
有关如何识别代码、如何将其拆分为多行以及其他格式信息的所有信息都将丢失。 变量的名称丢失了。 (准确地说,其中一些信息会进入一个单独的文件,供调试器在您单步执行程序时使用,但这是一个不同的主题)。
编译器生成完全相同的代码
int someInt = 1;
和
int someInt = 01;
和
int someInt = 001;
到您的程序执行时,它不再能够判断原始 C 文件是否为上述 3 种形式中的任何一种(或任何其他等效形式)。
您可以做的是将您的号码定义为字符串开头。 如果您需要将其作为整数,则将其转换为整数。
int main()
{
char[] numericString= "01";
int someInt;
someInt = (int)strtol(numericString, NULL, 10);
printf("The number is %d", someInt);
printf("Number of digits is %d", strlen(numericString));
}
让我们看看你的代码。
int main()
{
int someInt = 01;
char str[12];
sprintf(str, "%d", someInt);
printf("%d",strlen(str));
}
正如评论中所指出的, 01
是一个整数文字,你已经写了... 1
。 让我们还将字符串中的每个字符初始化为'\\0'
以避免潜在的空终止符问题,并在程序末尾打印一个漂亮的换行符。
int main()
{
int someInt = 01;
char str[12] = {0};
sprintf(str, "%d", someInt);
printf("%d\n", strlen(str));
}
它仍然打印1
,因为这是字符串的长度,除非我们在%d
说明符上使用修饰符。 让我们用%2d
为该字段设置宽度为2
。
int main()
{
int someInt = 01;
char str[12] = {0};
sprintf(str, "%2d", someInt);
printf("%zu\n", strlen(str));
}
现在它打印2
。
如果您想在str
存储"01"
,您可以修改它以打印前导零以用%02d
填充 int 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.