这是我的代码,我想知道为什么我的char *bdin
没有被重新编号为数字,当它在函数isdigit()中被检查时?这是我改进的getline和我的检查功能,对于检查功能,不要看参数,我只是创建了实验功能。我想当我将bdin
放入函数isdigit()
时,它会将它们提供给第一个元素[0]
。我也尝试使用(char *) (bdin)[0]
来获取第一个元素,因为其他元素是'\n'
和'\0'
,但它仍然没有工作......
int getline(char *ulaz)
{
int i , c;
for ( i = 0; (c = getchar())!= EOF && c!='\n';i++, ulaz++)
*ulaz = c;
if ( c =='\n')
*ulaz++ = '\n';
*ulaz = '\0';
return i;
}
void checker(void)
{
int duzina;
char *bdin;
duzina = getline(&bdin);
if ( isdigit(bdin))
printf("It is digit!!\n");
else
printf("no!\n");
}
答案 0 :(得分:1)
程序有未定义的行为,因为你没有分配bdin指向的内存以及你要写入输入的位置。 此程序还有使用不正确数据类型的其他错误。 Fpr示例表达式的类型
&bdin
是char **
,而函数的相应参数的类型为char *
这个表达也没有意义。
ISDIGIT(bdin)
当您通过int
时,函数isdigit的参数类型为char *
您可以编写例如
if ( isdigit( *bdin ) )
或
if ( isdigit( bdin[0] ) )
但无论如何,该函数只检查一个字符是否为数字。