構造体にchar配列を含むキューを出力しようとしています。Webアドレスが記載されたテキストファイルを読み取り、キューにプッシュして印刷しようとしています。最初の4行は問題ありませんが、その後、他のほとんどすべての行で不良文字が印刷され始めます。何が起こっているのかわかりません。fgetsからchar配列を直接印刷しても、正しく印刷され、キューも正しく印刷されるので、混乱しています...
何か案が?
関連するコードは次のとおりです。
構造体:
typedef struct n_queue {
char *web;
struct n_queue *next;
} QUEUE_NODE, *P_QUEUE_NODE;
typedef struct k_queue {
P_QUEUE_NODE head;
P_QUEUE_NODE tail;
} kind_queue;
ファイルの読み取り:
void readFile(kind_queue *q) {
char data[9][150];
FILE *f=fopen("list.txt", "r");
if (f == NULL) perror("Web list couldn't be found.");
int j =0;
int i;
while (fgets(data[j],150, f)!=NULL) {
//If I uncomment the line below, both char array and char array in queue
//are printed allright
//printf("%s", data[j]);
//Supress the new line char
for (i=0;i<150;i++) {
if (data[j][i] == '\n') {
data[j][i]='\0';
break;
}
}
push_queue(q, data[j]);
j++;
}
fclose(f);
}
プッシュコード:
void push_queue(kind_queue *q, char *web){
P_QUEUE_NODE p;
p = (P_QUEUE_NODE) malloc(sizeof(QUEUE_NODE));
p->next = NULL;
p->web = web;
if (is_empty(q)) q->tail = q->head = p;
else{
q->tail->next= p;
q->tail = p;
}
}
主な機能:
int main () {
kind_queue queue, *pt_queue_struct;
pt_queue_struct = &queue;
pt_queue_struct = init_queue(pt_queue_struct);
readFile(&queue);
print_queue(&queue);
return(0);
}
そして最後に印刷機能:
void print_queue(kind_queue *q) {
P_QUEUE_NODE paux;
int j=1;
for (paux=q->head; paux != NULL; paux=paux->next) {
printf("%d: %s\n", j, paux->web);
j++;
}
}
REAL TXT:
http://www.google.es
http://stackoverflow.com
http://www.facebook.com
http://akinator.com/cea
http://developer.android.com/map
http://tirsa.es/65/65.htm
http://www.ufo.es/
http://thisty.com/init/
http://damned-c.me/
出力:
1: http://www.google.es
2: http://stackoverflow.com
3: http://www.facebook.com
4: http://akinator.com/cea
5:
6:
7: http://www.ufo.es/
8: http:/(dU[~
9: (dU[~