2017-06-15 160 views
0

所以我有下面这段代码,在我的代码加载了一堆电影到结构数组,现在我知道这个问题是发生在这里 (的strcpy(部分[X]。等级,SP),以及它是什么样子的strcpy的工作不正常,任何人都可以给我一个提示或我可以用它来解决问题的一些有用的东西我已经试过这样做没有strcpy的,但它也不起作用?!复制一个字符串转换成一个结构数组

struct movies 
{ 
char *name; 
char *rating; 
int time; 
float rtwo,rone,rthree; 
}; 

void displayData(movies *); 
main() 
{ 
struct movies parts[6]; 
FILE *fp; 
char line[100]; 

fp=fopen("movies.csv","r"); 
if (fp == NULL) 
{ 
    printf("Could not locate file"); 
    exit(0); 
} 

char *sp; 
int x = 0; 
    while (fgets(line,100,fp)!=NULL) 
    { 

     sp=strtok(line,","); 
     strcpy(parts[x].name,sp);  


     sp=strtok(NULL,","); 
     strcpy(parts[x].rating,sp); 

     sp=strtok(NULL,","); 
     sscanf(sp,"%d", &parts[x].time); 
     sp=strtok(NULL,","); 
     sscanf(sp,"%f", &parts[x].rone); 
     sp=strtok(NULL,","); 
     sscanf(sp,"%f", &parts[x].rtwo); 
     sp=strtok(NULL,","); 
     sscanf(sp,"%f", &parts[x].rthree); 
     ++x; 
    } 
fclose(fp); 
displayData(parts); 
return 0; 
} 

void displayData(movies *parts) 
{ 
for (int x=0; x < 6 ; ++x) 
{ 
    printf("\n Name: %s RATED: %s Time:%d crit: %.1f crit: %.1f crit: 
    %.0f",parts[x].name,parts[x].rating,parts[x] 
    .time,parts[x].rone,parts[x].rtwo,pa 
    rts[x].rthree); 

    } 
} 
+0

并且是的,我做过#include 和所有其他必要的库。 –

+0

你的结构中没有阵列!指针是**不是**数组! – Olaf

+0

鉴于'parts [x] .name'是一个指针,它指向什么? –

回答

1

主要问题是您不会为要复制的字符串保留目标内存。注意,struct movies -object提供了一种数据构件name,这允许存储指向字符值的序列,但不是字符值themselfes。因此,strcpy(parts[x].name,sp)访问(未初始化)指针parts[0].name(其已经是UB本身);指针可能指向“某处”,然后将一个字符串复制到“某处”。

所以你不得不使用malloc第一,呼吁strcpy前;或者你可以使用strdup,这确实mallocstrcpy在一个电话:

sp=strtok(line,","); 
    parts[x].name = malloc(strlen(sp)+1); 
    strcpy(parts[x].name,sp);  

或:

sp=strtok(line,","); 
    parts[x].name = strdup(sp); 

此外,你应该检查一下strtok实际返回的东西有效,例如如:

if ((sp=strtok(line,",")) == NULL) 
     continue; 
    parts[x].name = strdup(sp); 
+0

谢谢,它工作!我没有看到一两个,但从堆栈溢出的多个例子,但找不到解决方案!现在我明白了,我必须在复制字符串之前分配内存! –

0

去过,因为我打了使用C一段时间,但是,你不使用前需要先对malloc部分[X] .rating?同样的事情零件[X]。名称和任何其他字符指针你有。

相关问题