【发布时间】:2020-10-29 00:05:43
【问题描述】:
我正在学习 C,我需要构建代码来读取和比较来自 CSV 文件的用户登录信息。我正在尝试使用strtok()function 将数组中的 CSV 值分开。但是当我调试代码(使用 Visual Studio 代码)时,它会在 user_data_column = strtok(line, ','); 行显示错误 Cannot access memory at address。我没有找到特定案例的搜索结果,但在成功之内。完整代码:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <limits.h>
#include <string.h>
#include <locale.h>
char username[50], password[50];
char cwd[PATH_MAX];
void show_login()
{
typedef struct
{
char *user;
char *password;
} * user;
char *user_data_column;
user *user_data;
getcwd(cwd, sizeof(cwd));
strcat(cwd, "/data/Users.csv");
FILE *users_list = fopen(cwd, "r");
long file_length = ftell(users_list);
char *buffer = malloc(file_length);
char line[PATH_MAX];
int line_counter = 0;
int is_authorized = 0;
printf("\bLogin\n");
printf("Nome do usuário: ");
fgets(username, sizeof(username), stdin);
printf("Senha: ");
fgets(password, sizeof(password), stdin);
if (users_list)
{
if (buffer)
{
while (fgets(line, sizeof(line), users_list) != NULL)
{
if (line_counter == 0)
{
line_counter++;
continue;
}
user_data_column = strtok(line, ',');
}
}
}
else
{
printf("Erro! O arquivo Users.csv não foi encontrado\n");
exit(1);
}
fclose(users_list);
}
int main()
{
show_login();
return 0;
}
(比较登录的步骤没有完成) 错误:
【问题讨论】:
-
strtok()的第二个参数应该是字符串,而不是char。 -
strtok(line, ",") -
你应该在编译时收到关于类型不匹配的警告。
-
usertypedef 可能不应该是指针。 -
另请注意,如果您在同一字符串上多次调用
strtok(),则只有第一个调用使用strtok(line, ...;,所有后续调用都使用strtok (NULL, ...。跨度>