在C中的方法中返回一个typedef结构

时间:2012-10-20 09:25:51

标签: c unix

我正在尝试创建一个包含解析信息的结构,并且我想创建一个方法来返回填充了数据的stuct。这是我到目前为止所得到的但是我收到一个错误,说Parser.c: 3:错误:在'parseString'之前预期'=',',',';','asm'或'属性'

Parser.h

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

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

    }ParserData;


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

Parser.c

    #include "Parser.h"

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

         tempData.myNumArguments = argc;

         return tempData; 
    }

Mish.h

    #include "Parser.h"

    ParserData myParserData;

Mish.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);
    }

2 个答案:

答案 0 :(得分: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 *遗漏了大量错误检查代码和内存管理。希望它能帮助您找出分割成标题和实现文件的内容。

答案 1 :(得分:0)

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