将变量传递给 C 函数时出错
Error when passing variables to C function
我目前正在开发的程序从文本文件中获取一些变量,并使用它们登录监控摄像头。我有一个包含以下变量的配置文件:
192.168.1.30
8000
admin
12345
./var/users/user/files_camera/
我可以在控制台中阅读和打印它们:
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("Could not open file %s",filename);
return 0;
}
for(int i=0; i<variables; i++)
{
if(fgets(str, MAXCHAR, fp) != NULL)
{
if(i==0)
{
strcpy(ip, str);
}
if(i==1)
{
sscanf(str, "%d", &port);
}
if(i==2)
{
strcpy(user, str);
}
if(i==3)
{
strcpy(password, str);
}
if(i==4)
{
strcpy(directory, str);
}
}
}
fclose(fp);
printf("%s", ip);
printf("%d\n", port);
printf("%s", user);
printf("%s", password);
printf("%s", directory);
问题是程序在使用以下函数时有效:
lUserID = NET_DVR_Login_V30("192.168.1.30", 8000, "admin", "12345", &struDeviceInfo);
但使用时不是:
lUserID = NET_DVR_Login_V30(ip, port, user, password, &struDeviceInfo);
编译时没有错误,只是程序没有按预期运行:程序编译并执行,但相机returns由于用户名和密码错误导致登录错误。这是变量的声明:
#define MAXCHAR 50
char ip[MAXCHAR];
int port;
char user[MAXCHAR];
char password[MAXCHAR];
char directory[MAXCHAR];
我做错了什么?
正如 Alex Skalozub 所说,fgets 函数在末尾包含换行符,我没有记住这一点。这就是我为解决问题所做的工作:
char buffer[MAXCHAR];
strcpy(buffer, str);
strncpy(ip, buffer, strlen(buffer)-1);
使用了一个额外的变量来读取每一行并删除了每个变量末尾的 \n 字符。
现在可以使用了!谢谢!
printf("%s", ip);
printf("%d\n", port);
printf("%s", user);
printf("%s", password);
printf("%s", directory);
您是否注意到端口需要“%d\n”但字符串参数不需要“\n”?这应该给出这些参数已经以换行符结尾的想法。所以你将错误的字符串传递给函数,不是“12345”,而是“12345\n”。
我目前正在开发的程序从文本文件中获取一些变量,并使用它们登录监控摄像头。我有一个包含以下变量的配置文件:
192.168.1.30
8000
admin
12345
./var/users/user/files_camera/
我可以在控制台中阅读和打印它们:
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("Could not open file %s",filename);
return 0;
}
for(int i=0; i<variables; i++)
{
if(fgets(str, MAXCHAR, fp) != NULL)
{
if(i==0)
{
strcpy(ip, str);
}
if(i==1)
{
sscanf(str, "%d", &port);
}
if(i==2)
{
strcpy(user, str);
}
if(i==3)
{
strcpy(password, str);
}
if(i==4)
{
strcpy(directory, str);
}
}
}
fclose(fp);
printf("%s", ip);
printf("%d\n", port);
printf("%s", user);
printf("%s", password);
printf("%s", directory);
问题是程序在使用以下函数时有效:
lUserID = NET_DVR_Login_V30("192.168.1.30", 8000, "admin", "12345", &struDeviceInfo);
但使用时不是:
lUserID = NET_DVR_Login_V30(ip, port, user, password, &struDeviceInfo);
编译时没有错误,只是程序没有按预期运行:程序编译并执行,但相机returns由于用户名和密码错误导致登录错误。这是变量的声明:
#define MAXCHAR 50
char ip[MAXCHAR];
int port;
char user[MAXCHAR];
char password[MAXCHAR];
char directory[MAXCHAR];
我做错了什么?
正如 Alex Skalozub 所说,fgets 函数在末尾包含换行符,我没有记住这一点。这就是我为解决问题所做的工作:
char buffer[MAXCHAR];
strcpy(buffer, str);
strncpy(ip, buffer, strlen(buffer)-1);
使用了一个额外的变量来读取每一行并删除了每个变量末尾的 \n 字符。
现在可以使用了!谢谢!
printf("%s", ip);
printf("%d\n", port);
printf("%s", user);
printf("%s", password);
printf("%s", directory);
您是否注意到端口需要“%d\n”但字符串参数不需要“\n”?这应该给出这些参数已经以换行符结尾的想法。所以你将错误的字符串传递给函数,不是“12345”,而是“12345\n”。