从不兼容的指针类型传递“fgets”的参数3

时间:2016-09-05 21:18:41

标签: c arrays fgets

我对我的计划发出警告,但我不知道如何解决这个问题。首先我收到警告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;
    }
}

2 个答案:

答案 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)

鉴于任务说明:

  • 复制以字母字符开头的字符串,并继续使用buffname
  • 的字母数字字符

代码根本不应该使用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=]