解析 CSV 文本行时出错
Error when parsing line of CSV text
我在 C 语言中解析 CSV 文件失败。我需要用该文件中的数据归档一个结构。这是我的结构的相关部分:
typedef struct Info {
/* Some strings, integers, etc. */
char correct; /* This is the value I can't set */
short int status;
} t_info;
我文件中的一行看起来像这样 xxxxxx;xxxxxxx;xxxxxxx;D;254(D 是我的问题,请参阅下面)。
char line[1024]; /* Buffer */
t_info info;
fgets(line, sizeof(line), fp);
strcpy(info.xxxxxx, getLine(line, 1)); /* Works */
strcpy(info.xxxxxx, getLine(line, 2)); /* Works */
strcpy(info.xxxxxx, getLine(line, 3)); /* Works */
strcpy(info.correct, getLine(line, 4)); /* Crashs! */
getLine() 函数取自 this post:
const char *getLine(char *line, int num)
{
const char *tok, *tmp = strdup(line);
for (tok = strtok(tmp, ";"); tok && *tok; tok = strtok(NULL, ";\n"))
{
if (!--num)
return tok;
}
return NULL;
}
我的问题是什么?
解决此问题的最简单方法是获取行的第一个字符,并将其用于字符。
info.correct = getLine(line, 4)[0];
也许 sscanf 可能更适合您的应用程序(guide here) or (similar answer)。
无法使用 strcpy()
保存到 char
。
typedef struct Info {
char correct; /* This is the value I can't set */
} t_info;
strcpy(info.correct, getLine(line, 4)); /* Crashs! */
使用
info.correct = *getLine(line, 4);
您的编译器应该对此发出警告。检查编译器设置。
我在 C 语言中解析 CSV 文件失败。我需要用该文件中的数据归档一个结构。这是我的结构的相关部分:
typedef struct Info {
/* Some strings, integers, etc. */
char correct; /* This is the value I can't set */
short int status;
} t_info;
我文件中的一行看起来像这样 xxxxxx;xxxxxxx;xxxxxxx;D;254(D 是我的问题,请参阅下面)。
char line[1024]; /* Buffer */
t_info info;
fgets(line, sizeof(line), fp);
strcpy(info.xxxxxx, getLine(line, 1)); /* Works */
strcpy(info.xxxxxx, getLine(line, 2)); /* Works */
strcpy(info.xxxxxx, getLine(line, 3)); /* Works */
strcpy(info.correct, getLine(line, 4)); /* Crashs! */
getLine() 函数取自 this post:
const char *getLine(char *line, int num)
{
const char *tok, *tmp = strdup(line);
for (tok = strtok(tmp, ";"); tok && *tok; tok = strtok(NULL, ";\n"))
{
if (!--num)
return tok;
}
return NULL;
}
我的问题是什么?
解决此问题的最简单方法是获取行的第一个字符,并将其用于字符。
info.correct = getLine(line, 4)[0];
也许 sscanf 可能更适合您的应用程序(guide here) or (similar answer)。
无法使用 strcpy()
保存到 char
。
typedef struct Info {
char correct; /* This is the value I can't set */
} t_info;
strcpy(info.correct, getLine(line, 4)); /* Crashs! */
使用
info.correct = *getLine(line, 4);
您的编译器应该对此发出警告。检查编译器设置。