3

我正在尝试创建一个包含解析信息的结构,并且我想创建一个返回填充数据的结构的方法。这是我到目前为止所拥有的,但我收到一个错误提示 Parser.c:3: error :在 'parseString' 之前应有 '='、','、';'、'asm' 或 '<strong>attribute'</p>

解析器.h

    #include <stdio.h>
    #include <string.h>

    typedef struct 
    {
       char* myArguments;
       char* myProgramName;
           int myNumArguments;

    }ParserData;


    ParserData parseString(int argc, char** argv);

解析器.c

    #include "Parser.h"

    ParserData parseString(int argc, char **argv)
    {
         ParserData tempData;

         tempData.myNumArguments = argc;

         return tempData; 
    }

米什.h

    #include "Parser.h"

    ParserData myParserData;

米什.c

   #include <stdio.h>
   #include <string.h>
   #include <sys/types.h>
   #include <unistd.h>
   #include <sys/wait.h>
   #include "Mish.h"

   #define MAXLINE 1024


   int main(int argc, char *argv[], char **environ)
   {
       char buf[MAXLINE];
       pid_t pid;
           int status;

       printf("mish>"); //Print shell

       myParserData = parseString(argc, argv);

       while (fgets(buf, MAXLINE, stdin) != NULL) 
       {
       buf[strlen(buf) - 1] = 0; /* replace newline with null */

       if ( (pid = fork()) < 0)
       {
          printf("fork error");
       }
       else if (pid == 0) /* child */
       { 
          execlp(buf, argv[1], (char *) 0);
          printf("couldn't execute: %s", buf);
          return(127);
       }

       /* parent */
       if ( (pid = waitpid(pid, &status, 0)) < 0)
       {
          printf("waitpid error");  
          printf("%% ");
       }

       }

  return(0);
    }
4

2 回答 2

2

这是一种方法(main.c):

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

typedef struct {
    char* myArguments;
    char* myProgramName;
    int myNumArguments;
} ParserData;

ParserData * parseString(int argc, char** argv);

int
main(int argc, char const *argv[])
{
    ParserData *foo = NULL;

    foo = parseString(argc, (char **)argv);
    if (foo) {
        fprintf(stderr, "myNumArguments: %d\n", foo->myNumArguments);
        free(foo);
    }

    return EXIT_SUCCESS; 
}

ParserData *
parseString(int argc, char **argv)
{
    ParserData *tempData;

    tempData = malloc(sizeof(ParserData));
    tempData->myNumArguments = argc;

    return tempData;
}

编译:

$ gcc -Wall main.c -o foo

跑步:

$ ./foo 
myNumArguments: 1
$ ./foo bar
myNumArguments: 2

这为结构中的两者留下了很多错误检查代码和内存管理char *。希望它能帮助您弄清楚将哪些内容拆分为头文件和实现文件。

于 2012-10-20T09:47:31.087 回答
0

好的,所以这不是代码问题,而是文件问题。我注意到 .h 文件有 Mish.h.gch 和 Parser.h.gch。我删除了 .h 和 .h.gch 并重新创建了 .h 文件,然后用“gcc -o mish Parser.c Mish.c”编译,编译成功。我的猜测是新代码没有正确更新是一个问题......

于 2012-10-20T23:13:56.770 回答