我正在尝试创建一个包含解析信息的结构,并且我想创建一个方法来返回填充了数据的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);
}
答案 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”编译并成功编译。我的猜测是新代码没有正确更新是个问题......