0 c
我有以下内容:
LPSTR email // Has data in it already
LPSTR index=strchr(email,'@');
Run Code Online (Sandbox Code Playgroud)
现在我想插入一个新的字符串:
LPSTR username
Run Code Online (Sandbox Code Playgroud)
从字符串开头到"索引"的"电子邮件"部分.
例如:email ="roel@emailI-ISP.com"so username ="roel".
是否有功能快速完成或我需要构建一个?
罗埃尔
小智 6
RFC 5321定义的电子邮件地址比您的代码假定的更复杂.例如:
"Strange@Name"@example.com
Run Code Online (Sandbox Code Playgroud)
是一个有效的电子邮件地址.如果您的代码具有安全隐患,那么您将需要更强大的功能.
假设不是这样,strrchr可用于查找最后一个@字符.由于电子邮件地址的域/地址部分不能包含@,因此可以可靠地找到@ you'后.
获得索引后,在C中有多个选项可用于字符串拆分.
如果您拥有电子邮件字符串缓冲区并且不需要保持原样,则可以将其拆分而无需任何分配(只需确保您只发送电子邮件而不是用户名/域名):
if (index)
{
*index = '\0';
username = email;
domain = index + 1;
}
Run Code Online (Sandbox Code Playgroud)
或者您可以以相同的方式拆分,但使用strdup来分配新的字符串缓冲区(记得自由调用):
if (index)
{
*index = '\0';
username = strdup(email);
domain = strdup(index + 1);
*index = '@'; /* if you need to use email in full again */
}
Run Code Online (Sandbox Code Playgroud)
如果您不能或不想修改电子邮件缓冲区,您可以执行以下操作:
if (index)
{
ptrdiff_t atOffset = index - email;
username = calloc(atOffset + 1, sizeof(CHAR));
strncpy(username, email, atOffset);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是C++,则应该使用字符串封装类而不是C风格的字符串操作.
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |