我想用 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 的值时,我在字符串之前有 - 或其他字符。
然后正常登录不正确或被拒绝。
这是图片:
对于没有问题的功能,我可以更改代码:
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,颜色为白色以保护我的帐户。
答案 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()
传递给登录功能