读取csv存入单链 表为什么打出来是乱码

#include
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <stdbool.h>
#define MAXSIZE 256
typedef struct snode
{
char data;
struct snode* next;
}LinkStrNode;

typedef struct {
char no;
char year;
char month;
char date;
char good;
char bad;

}Almanac;

typedef struct {
char data_s[MAXSIZE];
int len;
}SeqString;
typedef struct node{
Almanac data_t;
struct node *next;

}NodeType;
//链式存储运算函数
NodeType* Initl();
NodeType* SearchL(NodeType* head, Almanac x);
int InsertL(NodeType* head, Almanac x);
int DeleteL(NodeType* head, Almanac x);
//串的运算函数
static LinkStrNode* Concat(LinkStrNode* s, LinkStrNode* t);
static void DestroyStr(LinkStrNode*& s);
static void StrCopy(LinkStrNode*& s, LinkStrNode* t);
static bool StrEqual(LinkStrNode* s, LinkStrNode* t);
static int StrLength(LinkStrNode* s);
static LinkStrNode* Concat(LinkStrNode* s, LinkStrNode* t);
static LinkStrNode* SubStr(LinkStrNode* s, int pos, int len);
static LinkStrNode* InsStr(LinkStrNode* s, int pos, LinkStrNode* t);
static LinkStrNode* DelStr(LinkStrNode* s, int pos, int len);
static LinkStrNode* RepStr(LinkStrNode* s, int pos, int len, LinkStrNode* t);
static void DispStr(LinkStrNode* s);

int main()
{
NodeType* tail, * n_p, * n_s,show;
NodeType
head = NULL;
Almanac x;
head = Initl();
tail = head;

//读取数据
char a[1024];
FILE* fp = NULL;
fp = fopen("C:\Users\Aaron\Desktop\一甲子.csv", "at+");
if (fp != NULL)
printf("打开文件成功!!\n");
else printf("失败!!\n");
char* line;//字符指针
char* p1 = NULL;
char* p2 = NULL;
char* p3 = NULL;
char* p4 = NULL;
char* p5 = NULL;
char* p6 = NULL;
char* p7 = NULL;
char* p8 = NULL;
char* p9 = NULL;
char* p10 = NULL;
char buffer[1024], s[2048];//存储所有字符
const char* delim = ";";
int k = 0;
int j = 0;
char l[1024];
for (j; j < 100; j++) {

    fseek(fp, k, SEEK_SET);
    line = fgets(buffer, 1024, fp);//先获取所有
    strcpy(s, line);//字符指针转给字符常量,否则不能用strtok
    int s_len = strlen(line);
    //printf("%d\n", s_len);
    //printf("s=%s\n", s);
    k = k + s_len + 1;
    int t = 0;
    char* stump=NULL;
    n_s = (NodeType*)malloc(sizeof(NodeType));
    for (t; t < 5; t++) {
        if (t == 0) {
            p1 = strtok_s(s, delim,&p2);
            strcpy(l, p1);
            n_s->data_t.no = *l;
            printf("%s\t", &n_s->data_t.no);
            
           
        
        }
        else if (t == 1) {
            p3 = strtok_s(p2, delim,&p4);
            printf("%s\t", p3);
            
        

        }
        else if (t == 2) {
            p5 = strtok_s(p4, delim,&p6);
            printf("%s\t", p5);
            //p_len = p_len + strlen(p1);

;

        }
        else if (t == 3) {
            p7 = strtok_s(p6, delim,&p8);
            printf("%s\t", p7);
            //p_len = p_len + strlen(p1);

        }
        else if(t==4){
            p9 = strtok_s(p8, delim,&p10);
            printf("%64s\t", p9);
            //p_len = p_len + strlen(p1);
            printf("%64s\n", p10);

        }
    }
   
   // n_s->data_t.no = *p1;
   // n_s->data_t.year = *p3;
   // n_s->data_t.month = *p5;
   // n_s->data_t.date = *p7;
   // n_s->data_t.good = *p9;
   // n_s->data_t.bad = *p10;
    n_s->next = NULL;
    tail->next = n_s;
    tail = n_s;

}
//printf("\n.......显示.......\n");
//show = head->next;
//printf("%11s%6s%6s%6s\n%64s\n%64s\n", "序号", "年", "月", "日", "宜","忌");
//while (show != NULL) {
    //printf("%6s%6s%6s%6s\n%64\ns%64s\n", &show->data_t.no, &show->data_t.year, &show->data_t.month, &show->data_t.date, &show->data_t.good,&show->data_t.bad);
    //show = show->next;
//}

}[

img
](url)
在尝试将csv读取的数据存入单链表中的时候,读出来的字符可以显示,存进链表就会乱码,求大神帮忙

NodeType head = NULL;
改成 NodeType *head = NULL;
head也得是指针啊
fp = fopen("C:\Users\Aaron\Desktop\一甲子.csv", "at+");
改成
fp = fopen("C:\Users\Aaron\Desktop\一甲子.csv", "at+");
斜杠必须转义

if (fp != NULL)
printf("打开文件成功!!\n");
else printf("失败!!\n");
这里打开失败后,应该立刻return,否则后续使用空的fp指针会崩溃

char* p1 = NULL;
char* p2 = NULL;
char* p3 = NULL;
char* p4 = NULL;
char* p5 = NULL;
char* p6 = NULL;
char* p7 = NULL;
char* p8 = NULL;
char* p9 = NULL;
char* p10 = NULL;
这玩意累不,改成 char *[10] = {0};不挺好

printf("%s\t", &n_s->data_t.no);这个直接就蒙圈了,这个no在结构定义里是字符类型char,到这里怎么就成了字符串了呢?乱了