不使用malloc创建变量

时间:2014-04-28 10:43:36

标签: c++ curl ftp dev-c++

我想用 C ++ 创建程序,并在服务器FTP 上登录,如果服务器文件夹中有新文件,则会发生。

我的朋友已经创建了这个程序,它正在运行(正常工作)并将其传递给我。

在程序内部,我们使用CURL的库和工具在FTP上登录。

在我的计算机上,此程序无法使用DEV C ++。 然后我创建新项目,重写旧程序的所有代码,加载CURL库和编译。

程序遇到执行问题。

使用 MALLOC 分析程序存在异常。

这是一个异常的代码:

 char* userpwd = (char*)malloc(strlen(USERNAME)+1+strlen(PASSWORD));
 printf("\n malloc %s",userpwd);
          strcat(userpwd, (const char*)USERNAME);
          strcat(userpwd, ":");
          strcat(userpwd, (const char*)PASSWORD);
 printf("\n not %s",userpwd);

解释这个功能: 首先,我必须构建包含“USERNAME:PASSWORD”的变量。 问题出在char* userpwd = (char*)malloc(strlen(USERNAME)+1+strlen(PASSWORD));之后 因为当我打印 userpwd 的值时,我在字符串之前有 - 或其他字符。 然后正常登录不正确或被拒绝。

这是图片: enter image description here

对于没有问题的功能,我可以更改代码:

char userpwd[50];
              userpwd="USERNAME";
              strcat(userpwd, ":");
              strcat(userpwd, "PASSWORD");
     printf("\n not %s",userpwd);

这个功能。

但程序读取文件configuration.txt以获取URL,USERNAME和PASSWORD。 然后方便使用malloc,但在我的电脑和姐姐身上,我有异常的角色。

如何防止这些异常?为什么我有这些奇怪的角色? 感谢您提供任何帮助

P.S:我删除字符串USERNAME和PASSWORD,颜色为白色以保护我的帐户。

1 个答案:

答案 0 :(得分:2)

您忘记为终止零添加1 您还忘记在strcat之前将字符串置零 这导致了不确定的行为。

char* userpwd = (char*)malloc(strlen(USERNAME) + 1 + strlen(PASSWORD) + 1);
userpwd[0] = 0;

或(更好)使用惯用的C ++:

std::string USERNAME;
std::string PASSWORD;
// Load username and password...

std::string pass = USERNAME + ":" + PASSWORD;

并将pass.c_str()传递给登录功能