首页 > 解决方案 > 我在 c 中创建了一个 length() 函数,我想将它返回的数字放入数组的大小中,

问题描述

但这是不可能的,因为我不能在数组大小中放置一个变量。想法?该函数将检查有多少位构建整数并返回该数字

int intLength(int number)
{
    for(int i=0;i<number;i++)
    {
        number=number/10;
        if(number==1||number==0)
        {
            return i;
        }
    }
}

void just_a_function(void)
{
    number=241;
    char string[intLength(number)]={0};
}

标签: cinitializationvariable-length-array

解决方案


该函数具有未定义的行为,因为当数字不是正数时它不返回任何内容。

对于两位数,该函数返回 1,因为表达式可以产生 1。

number=number/10;

它可以如下所示

size_t intLength( int number )
{
    const int Base = 10;
    size_t n = 0;

    do
    {
        ++n;
    } while ( number /= Base );

    return n;
}

至于您的问题,那么您可能不会初始化可变长度数组。

来自 C 标准(6.7.9 初始化)

3 待初始化实体的类型应为大小未知的数组或非可变长度数组类型的完整对象类型。

所以这个带有初始化器的可变长度数组声明

char string[intLength(number)]={0};

是不正确的。

相反,您可以使用在标memset头中声明的标准 C 函数<string.h>

这是一个演示程序。

#include <stdio.h>
#include <string.h>

size_t intLength( int number )
{
    const int Base = 10;
    size_t n = 0;

    do
    {
        ++n;
    } while ( number /= Base );

    return n;
}

int main(void) 
{
    char string[intLength( 241 ) + 1];

    printf( "The size of the string is %zu\n", sizeof( string ) );

    memset( string, 0, sizeof( string ) );

    return 0;
}

程序输出为

The size of the string is 4

在声明中

char string[intLength( 241 ) + 1];

'\0'如果字符数组确实包含一个字符串,我为终止零添加了 一个字符。


推荐阅读