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

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;
}

最佳答案

这不起作用的原因是大多数初学者都不了解的C功能。关于scanf想要的东西:它想要一个指向char的指针。尽管正确使用(&)运算符的引用来获取指向它的指针,但是对于这种用法,这实际上是不正确的,因为在C中,数组(包括字符串)是指针访问的连续内存块,因此,您可以不要使用引用运算符。

因此,请执行以下操作:

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);


那应该可以解决您的问题。

关于c - 错误:格式为“%s”,期望参数类型为“字符*”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27083094/

10-13 08:20
查看更多