繁体   English   中英

为什么 strlen() 算错了?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM