У меня есть задание, которое должно быть написано на C (не на C ++), в котором мне нужно создать некоторые структуры для чтения нескольких текстовых файлов. Я изучил c раньше (2 года назад) - мне гораздо удобнее с Java, просто я не могу использовать это для этого проекта. Я думаю, моя проблема в том, что я не очень хорошо понимаю синтаксис указателя: /.
Тем не менее, моя настоящая проблема:
Код, который я написал, вылетает при попытке использовать функцию strcpy:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char* filename;
int time;
} JOB;
JOB **jobQueue;
int nJobs;
void trimLine(char* line) {
for (int i = strlen(line); i >=0; i--) {
if (line[i] == '\n' || line[i] == '\r') line[i] = '\0';
}
}
int main(int argc, char* argv[]) {
if (argc !=2) {
printf("Error - Usage is: my_project file\n");
exit(-1);
}
FILE *fp;
fp = fopen(argv[1],"r");
if (fp==NULL) {
printf("Error - file %s could not be read.\n",argv[1]);
exit(-1);
}
jobQueue = malloc(3*sizeof(JOB*));
char filename[BUFSIZ];
nJobs = 0;
while (fgets(filename,sizeof(jobfilename),fp)!=NULL) {
trimLine(filename);
JOB* newjob;
newjob = malloc(sizeof(JOB));
//** THIS IS WHERE IT SCREWS UP
strcpy(newjob->filename,filename);
jobQueue[nJobs++] = newjob;
}
}
Если я удаляю строку, содержащую strcpy, программа работает нормально (я понимаю, что эта часть ничего не делает, но все же). Однако, когда программа содержит строку strcpy, она прерывается при попытке выполнить задание № 2. Есть идеи почему?
Также: если мне нужно сохранить массив JOB для использования в других функциях, правильно ли я это сделал? JOB ** jobQueue - это массив указателей на JOB, JOB * newjob - указатель на JOB, это будет работать правильно?