错误:格式'%s'需要'char *'类型的参数?

时间:2014-11-22 22:07:50

标签: c

我的程序应该给我一个单词的长度,最高和最低字符。 当我编译程序时,我收到错误:

error: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[64]’ [-Werror=format=]
         scanf("%62s", & cString);

如果有人能帮我这个,那将是非常好的!

#include <stdio.h>

int stringstats(char sString[], char *cGroesster, char *cKleinster)
{
    //Variablen deklarieren

    int iLength = 0;
    int i = 0;
    *cKleinster = sString[0];
    *cGroesster = sString[0];

    while (sString[iLength] != '\0')
    {
        iLength++;
    }

    for (i = 0; i <= iLength - 1; i++)
    {
        if (sString[i] < *cKleinster)
        {
            *cKleinster = sString[i];
        }

        if (sString[i] > *cGroesster)
        {
            *cGroesster = sString[i];
        }
    }
    return iLength;
}

//Funktion deklarieren

int stringstats(char[], char *, char *);

#define LENGTH 64
int main(void)
{
    //Variablendeklaration

    char cString[LENGTH] = {0};
    int iLength = 0;
    char cGroesster = 0;
    char cKleinster = 0;

    while (1)
    {
        //Benutzereingabe String
        printf("Bitte einen String eingeben ('q' fuer Beenden) \n");
        scanf("%62s", & cString);

        //that`s where my problem is

        //Abbruchbedingung pruefen
        if (cString[0] == 'q' && cString[1] == '\0')
        {
            break;
        }

        //Funktion stringstats aufrufen
        iLength = stringstats(cString, &cGroesster, &cKleinster);

        printf("Laenge: %i \n", iLength);
        printf("Kleinster Buchstabe: %c \n", cKleinster);
        printf("Groesster Buchstabe: %c \n\n", cGroesster);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

这不起作用的原因是大多数初级程序员不知道的C的特征。关于scanf想要什么:它想要一个指向char的指针。虽然使用(&amp;)运算符的引用来获取指向它的指针是正确的,但实际上这对于此用途是不正确的,因为在C中,数组(包括字符串)是连续的内存块由指针访问< / strong>,因此,您不使用reference-of运算符。

因此,这样做:

scanf("%62s", & cString);

将指针传递给指向(不是拼写错误)的指针char。如果函数需要一个字符串,则不要传递对它的引用。

现在,让我们看看您的错误消息。编译器给你这个:

format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[64]

它告诉你的是你没有字符串。相反,你有一个指向char的指针数组。

变化:

char cString[LENGTH] = {0};

为:

char cString[LENGTH];

并改变:

scanf("%62s", & cString);

为:

scanf("%62s", cString);

这应该可以解决你的问题。

答案 1 :(得分:0)

替换它:

  scanf("%62s", & cString);

用这个:

  scanf("%62s", cString);

cString已经是一个指针,就像你指定数组时那样暗示了。你传入了指针的地址,这是一种char **