我对我的计划发出警告,但我不知道如何解决这个问题。首先我收到警告passing argument 3 of "fgets" from incompatible pointer type
。这是我的计划:
bool get_name(char name[],char buff[])
{
if(isalpha(buff))
{
fgets(name,sizeof(MAXNAME),buff);
return name;
}
else
{
return false;
}
}
答案 0 :(得分:1)
回答标题中的问题
来自fgets()
char *fgets(char *s, int size, FILE *stream)
,签名为
FILE *
其中,第三个参数是char *
类型。你无法在那里传递C11
。
另外,引用fgets
,第7.21.7.2章
n
函数最多读取的数字少于stream
指定的字符数 从s
指向的流进入char
指向的数组。 [...]
因此,它必须是流,而不是fgets()
数组或其他形式的文件名。
<强> 注意:的强>
正如评论中man page正确地提到的,从问题描述中看,您看起来根本不需要在代码中使用OffsetDateTime.parse( "2010-12-27T10:50:44.000-08:00" )
。请首先将问题陈述分解为笔和纸的算法以清除混淆,然后返回并重新编写代码。
答案 1 :(得分:1)
鉴于任务说明:
buff
到name
代码根本不应该使用fgets()
。 (如果fgets()
相关,请参阅问题的评论以讨论必要的内容。)代码应该是这样的:
bool get_name(char name[], char buff[])
{
if (isalpha(buff[0]))
{
int i;
for (i = 0; isalnum(buff[i]); i++)
name[i] = buff[i];
name[i] = '\0';
return true;
}
else
{
name[0] = '\0';
return false;
}
}
此代码假定name
足以容纳buff
中的任何标识符。请注意,当isalnum(buff[i])
为0时,i
测试将通过,但由于外部测试,检查的值将始终为字母。
#include <ctype.h>
#include <stdbool.h>
extern bool get_name(char name[], char buff[]);
bool get_name(char name[], char buff[])
{
if (isalpha(buff[0]))
{
int i;
for (i = 0; isalnum(buff[i]); i++)
name[i] = buff[i];
name[i] = '\0';
return true;
}
else
{
name[0] = '\0';
return false;
}
}
#include <assert.h>
#include <stdio.h>
static void test(char *buffer)
{
char name[64];
if (get_name(name, buffer))
printf("Got name [%s] from [%s]\n", name, buffer);
else
{
printf("No name in [%s]\n", buffer);
assert(name[0] == '\0');
}
}
int main(void)
{
char buffer1[] = "Adelson23 and all that!";
char buffer2[] = "=not an identifier=";
test(buffer1);
test(buffer2);
return 0;
}
Got name [Adelson23] from [Adelson23 and all that!]
No name in [=not an identifier=]