メモリ
#include "stdafx.h"
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int check(int a[100], int n);
typedef struct {
char number[6];
char class_type[20];
char name[8];
char subject[5];
} my;
my data[100];
int main(int argc, char* argv[])
{
FILE *fp;
int field = 0, line = 0;
char buf[1000], *str;
char bufG[1111];
int i;
if((fp=fopen("test3.csv","r"))==NULL){
printf("ファイルが開けません");
}
while(fgets(buf,1000,fp) !=NULL){
str=buf;
while(*str != '\0'){
if(*str != ','){
for(i = 0; *str != ',' && *str != '\0' ; i++){
if(*str == '\n'){
}
else{
bufG[i] = *str;
}
str++;
}
bufG[i] = '\0';
switch(field){
case 0:
strcpy(data[line].number, bufG);
break;
case 1:
strcpy(data[line].class_type, bufG);
break;
case 2:
strcpy(data[line].name, bufG);
break;
case 3:
strcpy(data[line].subject, bufG);
break;
}
field++;
}
else{
str++;
}
}
line++;
field = 0;
}
int p, q;
int a[100];
int u = 0;
for(p = 0; p < line; p++){
for(q = 0; q < line; q++){
if(strcmp(data[p].class_type, data[q].class_type) == 0 &&
strcmp(data[p].subject, data[q].subject) == 0 && p != q ){
//処理
}
}
}
}
fclose(fp);
return 0;
}
先日文字列入れ替えについてご質問したものですが
メモリの取り方についてご質問します。
先日このプログラムにおいて
my data[100]と固定してるのはいけないという意見をもらったので
メモリを取得しようと思ってるのですが
できればdata[i].○○の形でアクセスしたいのでこのままの形は
あまりかえたくないです。この場合
while(fgets(buf,1000,fp) !=NULL){
str=buf;
int len = strlen(buf);
my *o;
o = (my *)calloc( len + 1, sizeof(my *))
while(*str != '\0'){
としてみたのですがこれは実際どうなのでしょうか?
NULLは帰ってきてないみたいなので割り当ては出来てるとは思うんですが
この一行の文字列の大きさにぴったり合うメモリを割り当てたいのですが
ちゃんとなっているか調べる方法を教えて下さい。