开发者

Using strchr to build a string

I have the following:

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

Now I want to Insert into a new string:

LPSTR username

the part of "email" from the beginning of the string to "index".

For example: email="roel@e开发者_开发问答mailI-ISP.com" so username="roel" .

Is there a function to do it quick or do I need to build one?

Roel


Email addresses as defined by RFC 5321 are a more complex than your code assumes. For example:

"Strange@Name"@example.com

is a valid e-mail address. If your code has security implications then you'll need something more robust.

Assuming otherwise, strrchr can be used to find the last @ character. Since the domain/address part of an email address cannot contain an @, this will reliably find the @ you're after.

Once you have your index, you have several options in C for string splitting.

If you own the email string buffer and don't need to keep it intact you can split it without the need for any allocations (just make sure you only free email and not username/domain too):

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

Or you could split in the same way but use strdup to allocate new string buffers (remember to call free):

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

If you can't or don't want to modify the email buffer, you can do something like:

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

if you're using C++, you should probably use a string encapsulation class instead of C-style string manipulation.


size_t indexPos = index - email;
LPSTR username = malloc(indexPos + 1);
memcpy(username, email, indexPos);
username[indexPos] = '\0';

Don't forget to check for index being NULL.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜