I have a csv file that includes Korean characters. But I am not sure how Korean can be printed in the code that I have.
The csv file looks like this:
name,hp,damage
대학오리,20,5
대학냥이,30,10
시계탑기린,100,20
My code:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[1000];
int hp;
int damage;
} Monster;
typedef struct {
char header1[sizeof "name"];
char header2[sizeof "hp"];
char header3[sizeof "damage"];
} Header;
int main()
{
FILE* fp = fopen("entityData.csv", "r");
if (!fp) {
printf("Error opening file\n");
return 1;
}
Monster monsters[100];
int num_records = 0;
char line[100];
Header header;
fgets(line, sizeof line, fp);
strncpy(header.header1, strtok(line, ","), sizeof header.header1);
strncpy(header.header2, strtok(NULL, ","), sizeof header.header2);
strncpy(header.header3, strtok(NULL, "\n"), sizeof header.header3);
while (fgets(line, sizeof(line), fp))
{
char* token = strtok(line, ","); //, 기준으로 나눠서 token에 저장
strncpy(monsters[num_records].name, token, 20);
token = strtok(NULL, ",");
monsters[num_records].hp = atoi(token);
token = strtok(NULL, ",");
monsters[num_records].damage = atoi(token);
num_records++;
}
for (int i = 0; i < num_records; i++)
{
printf("%s:%s %s:%d %s:%d\n",
header.header1, monsters[i].name,
header.header2, monsters[i].hp,
header.header3, monsters[i].damage);
}
fclose(fp);
return 0;
}
The program I wrote reads the csv file above and should print it like this:
name:대학오리 hp:20 damage:5
name:대학냥이 hp:30 damage:10
name:시계탑기린 hp:100 damage:20
Instead the name part is broken.
After some searching around, I realized that Korean letters take up 2 bytes per letter, which does not match char types. I have tried using wchar but that has led to errors, and I feel like that I am stuck.
I know that asking such a question on an English website isn't the best, but I'm really just hoping if anyone knows anything.