我怎么做才能阻止错误“'char'之前的预期表达”?

时间:2013-03-12 05:20:13

标签: c compiler-construction casting char format

我正在编译我的工作,无论我如何编辑代码,这个错误都会出现:

expected expression before ‘char’

format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’

截至第二个错误,我尝试使用类型转换,但问题确实存在。有谁知道怎么做? 这是我的代码的一部分:

while ( char my_wget (char web_address[BUFLEN]) != EOF ) {
    printf ("%s", (char) web_address[BUFLEN]);

3 个答案:

答案 0 :(得分:2)

由于您在编写char时遇到语法错误,因此不允许使用char

也许你想到了:

int ch;
char web_address[BUFLEN];

while ((ch = my_wget(web_address)) != EOF)
    printf("%s\n", web_address);

使用my_wget()周围的正确声明(例如extern int my_wget(char *buffer);),应编译。你无法在任何地方声明变量。

第二个错误是因为web_address[BUFLEN]是一个字符(当然在我的代码中;它似乎也在你的代码中,因为编译器设法充分识别类型以产生错误)。如果你像我一样声明它,它也是超出数组末尾的那个。将char值(可能是8位数量)作为地址(指针;可能是32位或64位数量)处理是错误的,这就是编译器抱怨的原因。

答案 1 :(得分:1)

printf()声明中,尝试将部分char更改为char* 同样适用于while循环中的条件。将char之前的web_address更改为(char*)

我觉得你在"char"之前写my_wget()很奇怪。你能更具体一点吗?

答案 2 :(得分:1)

请参阅下面的代码

#include <stdio.h>

int main()
{
char c;
printf ("%s",  st);
}

当我编译它时,我收到相同的警告信息。

 warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’

所以我将程序更改为

#include <stdio.h>

int main()
{
char *str = "string";
printf ("%s",  st);
}

现在该程序正确编译。

因此,作为c的新手,这就是你学习语言的方法,写出最小的例子,证明你对这个概念有一个坚定的把握。