gpt4 book ai didi

c - 如何在 C 中正确使用字符串?

转载 作者:行者123 更新时间:2023-12-04 09:43:23 25 4
gpt4 key购买 nike

Java、Python 和其他语言毁了我。我正在尝试通过响应服务器代码来自动化 FTP 客户端:

例如:

// I know this is ugly, please bear with me

char username[25];
strcat(username, USER); //"USER "
strcat(username, usr); // "foo"
strcat(username, "\n"); // = "USER foo\n"

char password[25];
strcat(password, PASS); //"PASS "
strcat(password, pswd); //"bar"
strcat(password, "\n"); // = "PASS bar\n"


//read/write loop

while (1) {

char* responsePtr;
serverCode = readSocket(sockfd, mybuffer);

if (serverCode == 221)
break;

if (serverCode == 220)
responsePtr = &username;

if (serverCode == 331)
responsePtr = &password;

writeSocket(sockfd, responsePtr);

}

当我尝试这个时,它适用于 USER,但我得到了一些关于 PASS 的错误文本:

C->S: USER anonymous
S->C: 331 Please specify the password.
C->S: (??_?PASS random

谁能比我更聪明、更有经验的人给我一些 C 字符串指针?显然这不适合我。

最佳答案

在连接字符串之前,您需要对其进行初始化。默认情况下不初始化数组。

char username[25] = "";
char password[25] = "";

就其值(value)而言,您可以使用 sprintf 更轻松地创建字符串:

sprintf(username, "USER %s\n", usr);
sprintf(password, "PASS %s\n", pswd);

希望您也意识到使用固定大小的缓冲区会导致缓冲区溢出错误。为了安全起见,您应该确保防范它们。这很烦人,但这对你来说是 C:

if (snprintf(username, 25, "USER %s\n", usr)  >= 25 ||
snprintf(password, 25, "PASS %s\n", pswd) >= 25)
{
fprintf(stderr, "buffer overflow\n");
exit(EXIT_FAILURE);
}

关于c - 如何在 C 中正确使用字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com