[1.1] データファイルの解析を行おうとしています。
[1.2] printfを用いて調べたところ、char型の変数stackとtokをいじると構造体の変数の値が変ってしまうと判明
アドレスを調べてみたが、メモリの確保はしっかりできているようで変わる理由がわかりません
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct model{
char* Symbol;
char* Code;
};
char *fname="test(3).txt";//引数の仮データ
int size=1000;
int N=3;
//int main(char *fname,int size,int N){ //Javaから動かすつもりです
int main(){
FILE *fpd;
errno_t error;
int i,line=0;
struct model *data;
char *stack;
char *tok,*nexttoken;
data = (struct model *)malloc(sizeof(struct model)*(N+1));
for(i=0; i<=N; i++){
printf("data[%d]=%d\n",i,&data[i]);
data[i].Symbol = (char *)malloc(sizeof(char)*(N+1));
data[i].Symbol=NULL;
printf(" Symbol=%d\n",&data[i].Symbol);
data[i].Code = (char *)malloc(sizeof(char)*(N+1));
data[i].Code =NULL;
printf(" Code=%d\n\n",&data[i].Code);
}
tok = (char *)malloc(sizeof(char)*N);
printf("token=%d\n",&tok);
stack = (char *)malloc(sizeof(char)*N);
printf("stack=%d\n",&stack);
if(error = fopen_s(&fpd,fname,"r")!=0)exit(0);
printf("読み込んだ!\n");
while(fgets(stack,size,fpd)!=NULL){
printf("line:%d\n",line);
printf("stack:%s\nSymbol:%s\nCode:%s\n\n",stack,data[0].Symbol,data[0].Code);
if(line>0 && line<3){
i=0;
printf("stack=%d\ntok=%d\nSymbol=%d\n\n",&stack,&tok,&data[0].Symbol);
tok = strtok_s(stack, ",",&nexttoken);//1つ目の要素
//if(line==2)printf("--data[0].Symbol=%s\n",data[0].Symbol);
while( tok != NULL){
if(line==1){
data[i].Symbol=tok;
printf("data[%d].Symbol=%s\n",i,data[i].Symbol);
}else if(line==2){
data[i].Code=tok;
printf("data[%d].Code=%s\n",i,data[i].Code);
}
tok = strtok_s(NULL, ",",&nexttoken);// 2つ目以降
i++;
}
}
line++;
//if(line==2)printf("--data[0].Symbol=%s\n",data[0].Symbol);
}
for(i=0; i<=2*N+1; i++){
if(i<=N) printf("data[%d].Symbol=%s\n",i,data[i].Symbol);
else printf("data[%d].Code=%s\n",i-(N+1),data[i-(N+1)].Code);
if(i==N)printf("\n");
}
printf("\nN=%d\nEND\n",N);
fclose(fpd);
return 0;
}
30,30
1,01,001,111
0,10,110,000
0101101001011011010101010000110110010
[1.3] エラーなどはありません。
構造体の変数を操作していないのに変わってしまうので困っています。
その原因と解決方法を教えてください。
[2] 環境
[2.1] Windows
[2.2] Microsoft Visual stadio
[3] その他
C言語はそこそこ理解していると思います。