c - 我在 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};
}
解决方案
该函数具有未定义的行为,因为当数字不是正数时它不返回任何内容。
对于两位数,该函数返回 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'
如果字符数组确实包含一个字符串,我为终止零添加了
一个字符。
推荐阅读
- json - 使用 BigQuery 从 JSON 中提取动态参数
- r - 替换数据帧列表中的所有 NA R
- python - 如何使用 python exchangelib 在 Outlook 电子邮件中发送 html 表格内容
- angularjs - 如何更改 Angular Formly 描述的颜色?
- go - 可以使用切片作为共享内存吗?
- notepad++ - 在记事本++中,我可以禁用多行制表符缩进(使用自动换行)吗?
- c - 如何排列 .txt 文件的数据以与 C 中其他数据的每个值相对应
- react-native - react-native-azure-auth 退出 Web 视图不会自动关闭并返回移动应用程序
- python - 按字母顺序对熊猫数据框进行排序不起作用
- mysql - Mysql 8.0 使用低 CPU/RAM 和慢查询