Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
意外标记附近的语法错误';(';在C中)_C_File Io_Syntax Error_Fputs - Fatal编程技术网

意外标记附近的语法错误';(';在C中)

意外标记附近的语法错误';(';在C中),c,file-io,syntax-error,fputs,C,File Io,Syntax Error,Fputs,我收到一条令人困惑的错误消息。我正在Windows XP 32位上运行MinGW。当我尝试编译以下代码时,我收到一条错误消息“/hello.c:第4行:意外标记“(””附近的语法错误。第4行位于int main(…),我无法确定意外标记是“near”(”。我尝试使用int main(void),但我得到了相同的消息。但是,如果我编译它时没有“char string…”和“data=fputs(…)”,并且从给定的文本文件中读取它,那么它编译时不会出现问题 我试图完成的是从一个文件中读取文件名,该

我收到一条令人困惑的错误消息。我正在Windows XP 32位上运行MinGW。当我尝试编译以下代码时,我收到一条错误消息“/hello.c:第4行:意外标记“(””附近的语法错误。第4行位于int main(…),我无法确定意外标记是“near”(”。我尝试使用int main(void),但我得到了相同的消息。但是,如果我编译它时没有“char string…”和“data=fputs(…)”,并且从给定的文本文件中读取它,那么它编译时不会出现问题

我试图完成的是从一个文件中读取文件名,该文件名由外部源(即php)提供。最终,我将使用我所做的解析器将其转换为Apache模块,因此调用php,但我想在开始这一部分之前先构建一些模板代码

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    FILE *fp;
    //char string = "JD";    commented out
    char data;
    //printf("Type in your filename:   "); also commented out
    //scanf("%s", &argv);  also commented out

    if(argc >= 2)
    {
        fp = fopen("sample.txt", "r"); //switched to reading a given file
    }
    while((data = getchar()) != EOF)
    {
        fgets(data, sizeof(data), fp);
        // data = fputs(string, fp);
    }

    if (fp==NULL) /* error opening file returns NULL */
    {
        printf("Could not open player file!\n"); /* error message */
        return 1; /* exit with failure */
    }
    /* while we're not at end of file */
    while (fgets(data, sizeof(string), fp) != NULL)
    {
        printf(data); /* print the string */
    }

    fclose(fp); /* close the file */
    return 0; /* success */
}
#包括
#包括
内部主(空)
{
文件*fp;
//char string=“JD”已注释掉
字符数据;
//printf(“输入文件名:”);也被注释掉了
//scanf(“%s”和&argv);也已注释掉
如果(argc>=2)
{
fp=fopen(“sample.txt”,“r”);//切换到读取给定文件
}
而((data=getchar())!=EOF)
{
fgets(数据、sizeof(数据)、fp);
//数据=fputs(字符串,fp);
}
如果(fp==NULL)/*打开文件时出错,则返回NULL*/
{
printf(“无法打开播放器文件!\n”);/*错误消息*/
返回1;/*失败退出*/
}
/*虽然我们还没到文件的末尾*/
while(fgets(数据,sizeof(字符串),fp)!=NULL)
{
printf(数据);/*打印字符串*/
}
fclose(fp);/*关闭文件*/
返回0;/*成功*/
}
好吧,我试着写一个简单的“Hello World”程序,但是我仍然得到了相同的错误消息,这让我觉得错误消息根本不是由我的代码引起的

#include <stdio.h>

int main(void) //still getting a syntax error before unexpected token '('
{
    printf("Hello, world!");
    return 0;
}
#包括
int main(void)//在意外标记“(”之前仍存在语法错误
{
printf(“你好,世界!”);
返回0;
}
您的线路

int main (int argc, char *argv)
是错的,一定是

int main (int argc, char *argv[])


还有你的线路

char string = "JD";
应该是

const char *string = "JD";
还有,我不明白

scanf("%s", &argv);
你为什么要把一些东西读入argv
#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 1024  // a normal buffer size for fgets
int main (int argc, char *argv[])
{
    FILE *fp;
    //char string = "JD";
    //char data;
    char buffer[MAXLINE];
    if(argc != 2)
    {printf("usage : ./a.out <filename>\n"); return -1;}

    if((fp = fopen(argv[1],"r+")) == NULL)
    {printf("open file %s error\n",argv[1]); return -1;}

   /*
    while((data = getchar()) != EOF)
    {
        fgets(data, sizeof(data), fp);
        data = fputs(string, fp);
    }*/      //I don't understand this part .


    /* while we're not at end of file */
    while (fgets(buffer,MAXLINE , fp) != NULL)
    {
        printf("%s\n",buffer); /* print the string */
    }

    fclose(fp); /* close the file */
    return 0; /* success */
}
#包括 #定义MAXLINE 1024//FGET的正常缓冲区大小 int main(int argc,char*argv[]) { 文件*fp; //char string=“JD”; //字符数据; 字符缓冲区[MAXLINE]; 如果(argc!=2) {printf(“用法:./a.out\n”);返回-1;} 如果((fp=fopen(argv[1],“r+”)==NULL) {printf(“打开文件%s错误\n”,argv[1]);返回-1;} /* 而((data=getchar())!=EOF) { fgets(数据、sizeof(数据)、fp); 数据=fputs(字符串,fp); }*///我不明白这部分。 /*虽然我们还没到文件的末尾*/ while(fgets(缓冲区、MAXLINE、fp)!=NULL) { printf(“%s\n”,buffer);/*打印字符串*/ } fclose(fp);/*关闭文件*/ 返回0;/*成功*/ }
在让我的计算机休息一段时间后,我尝试在没有
fgets()函数的情况下重新编译不同的源代码,并且它们编译正确。我猜
fgets()函数正如alk所指出的,函数是由于函数引发的未定义行为而导致语法错误的原因,因为任何没有函数的代码现在编译时都不会出错,所以我考虑回答这个问题。

问题显然是哈希(#)之后和include之前缺少空间。
在我添加空间后,它就像一个符咒


(我知道这条线索有点旧,但谷歌把我带到这里来是因为我也有同样的问题,并试图找出问题所在,所以这可能会帮助其他人。)

我更喜欢
main
的第三个选项。它明确地说明了
argv
是什么,而第二个选项试图通过使它看起来像一个数组来隐藏它。@bash.d我已将它编辑为
int main(int argc,char**argv)
,以及
const char*string=“JD”
。我正在将文件名读入
argv
。那么,您仍然会收到错误吗?
argv
不是用来读入值的…是的,我仍然会收到错误。我尝试切换到
scanf(“%s”)和&filename)
,声明
filename[]
首先,但仍然会出现错误。您仍然没有更新到
int main(int argc,char**argv)
这个
fgets(data,sizeof(string),fp)
会引发未感染的行为,因为它读取了无效的地址,即
数据的值
。奇怪的是,当我使用
fp=fopen(“sample.txt”,“r”)时,这种行为起了作用
。但现在,由于某些原因,这已经不起作用了。您使用的是什么命令行进行编译?您的编译器编译的正确吗?您是否尝试了其他编译器(如DMC)?似乎问题出在您的编译器中。@Josh:您已经学会了“未定义行为”的导入方面:任何事情都可能发生!:-)请引用准确的错误消息,包括文件名和行号。尝试了您的建议,但仍然给我相同的错误消息。
#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 1024  // a normal buffer size for fgets
int main (int argc, char *argv[])
{
    FILE *fp;
    //char string = "JD";
    //char data;
    char buffer[MAXLINE];
    if(argc != 2)
    {printf("usage : ./a.out <filename>\n"); return -1;}

    if((fp = fopen(argv[1],"r+")) == NULL)
    {printf("open file %s error\n",argv[1]); return -1;}

   /*
    while((data = getchar()) != EOF)
    {
        fgets(data, sizeof(data), fp);
        data = fputs(string, fp);
    }*/      //I don't understand this part .


    /* while we're not at end of file */
    while (fgets(buffer,MAXLINE , fp) != NULL)
    {
        printf("%s\n",buffer); /* print the string */
    }

    fclose(fp); /* close the file */
    return 0; /* success */
}