我的程序应该给我一个单词的长度,最高和最低字符。 当我编译程序时,我收到错误:
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;
}
答案 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 **