gpt4 book ai didi

c - 使用 strchr 构建字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:48 25 4
gpt4 key购买 nike

我有以下内容:

LPSTR email // Has data in it already
LPSTR index=strchr(email,'@');

现在我想插入一个新字符串:

LPSTR username

从字符串开头到“index”的“email”部分。

例如:电子邮件="roel@emailI-ISP.com"所以 username="roel"。

是否有一个功能可以快速完成,或者我是否需要构建一个?

最佳答案

RFC 5321 定义的电子邮件地址比您的代码假设的要复杂。例如:

"Strange@Name"@example.com

是一个有效的电子邮件地址。如果您的代码具有安全隐患,那么您将需要更强大的东西。

否则假设,strrchr 可用于查找最后一个@ 字符。由于电子邮件地址的域/地址部分不能包含 @,因此这将可靠地找到您要查找的 @。

一旦有了索引,您就可以在 C 语言中使用多个选项来进行字符串拆分。

如果您拥有电子邮件字符串缓冲区并且不需要保持完整,您可以将其拆分而不需要任何分配(只需确保您只释放电子邮件而不是用户名/域):

if (index)
{
*index = '\0';
username = email;
domain = index + 1;
}

或者你可以用同样的方式拆分,但使用 strdup 分配新的字符串缓冲区(记得调用 free):

if (index)
{
*index = '\0';
username = strdup(email);
domain = strdup(index + 1);
*index = '@'; /* if you need to use email in full again */
}

如果您不能或不想修改电子邮件缓冲区,您可以这样做:

if (index)
{
ptrdiff_t atOffset = index - email;
username = calloc(atOffset + 1, sizeof(CHAR));
strncpy(username, email, atOffset);
}

如果您使用的是 C++,您可能应该使用字符串封装类而不是 C 风格的字符串操作。

关于c - 使用 strchr 构建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2980301/

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