将变量传递到C函数时出错

时间:2020-02-18 19:27:46

标签: c linux camera sdk

我当前正在使用的程序从文本文件中获取一些变量,然后使用它们登录安全摄像机。我有一个配置文件,其中包含以下变量:

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);

编译时没有错误,只是程序未按预期运行:程序编译并执行,但由于用户名和密码错误,相机返回登录错误。这是变量的声明:

#define MAXCHAR 50
char ip[MAXCHAR];
int port;
char user[MAXCHAR];
char password[MAXCHAR];
char directory[MAXCHAR];

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

<script>
  const data = <? data ?>
</script>

您是否注意到端口需要“%d \ n”但字符串参数不需要“ \ n”?这应该可以使这些参数已经以换行符结尾。因此,您将wrond字符串传递给函数,而不是“ 12345”,而是“ 12345 \ n”。

答案 1 :(得分:0)

正如Alex Skalozub所说,fgets函数的末尾包含换行符,我没有牢记这一点。这是我为解决此问题所做的事情:

char buffer[MAXCHAR];

strcpy(buffer, str);
strncpy(ip, buffer, strlen(buffer)-1);

使用一个额外的变量来读取每一行并删除每个变量末尾的\ n字符。

现在它正在工作!谢谢!