sh:1:语法错误:“(”C文件意外

时间:2013-11-22 05:07:53

标签: c syntax-error

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

我想要完成的是从文件中读取文件名由外部源(即php)提供。最终我将使用我已经制作的解析器将其用于Apache模块,因此来自php的调用,但是我想在我到达那个部分之前愚弄并构建一些模板代码。< / p>

#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 */
}

好的,我尝试编写一个简单的“Hello World”程序,但我仍然收到相同的错误信息,这让我觉得错误信息根本不是由我的代码引起的。

#include <stdio.h>

int main(void) //still getting a syntax error before unexpected token '('
{
    printf("Hello, world!");
    return 0;
}

3 个答案:

答案 0 :(得分:0)

您的逻辑存在问题。 “exploit”数组将包含“./myotherAAAAAAAAAAAAAAAAAAAA:”,您将传递给系统..所以问题必然会发生

答案 1 :(得分:0)

我认为您正在尝试运行./motherfile ...。然后当您将其连接到“exploit”时,名称变为“./myotherAAAAAAAAAAAAAAAAAA”而不是“./myotherfile AAAAAAAAAAAAAAAAAAAA”,以便空间首先将其连接起来

答案 2 :(得分:0)

strncpy(command, "./myotherfile ", 9);

仅复制前9个字符。用

替换它
strcpy(command, "./myotherfile ");

应该做你想做的事。

P.S。我怀疑你最初有

strncpy(command, "./myfile ", 9);

哪个有效,并且在更改文件名长度时没有更改9。有关于为什么这样的联轴器是一个坏主意而又该做什么的书籍。在这种情况下,最简单的解决方案是使用strcpy,因此您无需提及长度。