C 如何获取电子邮件地址的开头

C 如何获取电子邮件地址的开头,c,string,C,String,我有两个字符串,一个带有电子邮件地址,另一个是空的。 如果电子邮件地址为,例如“abc123@gmail.com“,我需要将电子邮件地址的开头,就在@之前,传递到第二个字符串中。例如: 第一个字符串:“abc123@gmail.com“ 第二个字符串:“abc123” 我已经写了一个循环,但它不起作用: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char e

我有两个字符串,一个带有电子邮件地址,另一个是空的。 如果电子邮件地址为,例如
“abc123@gmail.com“
,我需要将电子邮件地址的开头,就在
@
之前,传递到第二个字符串中。例如:

第一个字符串:
“abc123@gmail.com“

第二个字符串:
“abc123”

我已经写了一个循环,但它不起作用:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char email[256] = "abc123@gmail.com";
char temp[256];
int i = 0;

while (email[i] != '@')
{
      temp = strcat(temp, email[i]);
      i++;
}

printf ("%s\n", temp);
system ("PAUSE");
return 0;
}
#包括
#包括
#包括
int main()
{
char电子邮件[256]=”abc123@gmail.com";
字符温度[256];
int i=0;
while(电子邮件[i]!='@'))
{
temp=strcat(temp,电子邮件[i]);
i++;
}
printf(“%s\n”,temp);
系统(“暂停”);
返回0;
}

基本上,我每次都从电子邮件地址中提取一个字符,并将其添加到新字符串中。例如,如果新字符串上有a,现在我将使用
strcat
b
与它一起放置。

您可能想要尝试使用您可能想要尝试使用有更好的方法来解决此问题(例如,通过
strcspn
或其他方式)找到
的索引并执行
memcpy
),但是你的方法非常接近实际,所以我们可以做一些小的调整


正如其他人所指出的,问题在于这一行:

temp = strcat(temp, email[i]);
您可能正试图将
email
i
th位置的字符复制到
temp
的相应位置。但是,
strcat
不是正确的方法:
strcat
将数据从一个
char*
复制到另一个
char*
,即复制字符串。您只需要复制一个字符,这正是
=
所做的

从更高的层次来看(这样我就不会只告诉您答案),您需要将
temp
的适当字符设置为
email
的适当字符(您需要使用
I
email
temp
进行索引)


另外,请记住C中的字符串必须由
'\0'
终止,因此在复制完字符串后,必须将
temp
的下一个字符设置为
'\0'
。(在这个思路上,你应该考虑如果你的电子邮件字符串中没有<代码> @ /代码>,你的<代码>,循环将继续经过字符串<代码>电子邮件的< /代码>:请记住,你可以通过“代码>字符==‘0’< /CODE >或者只是使用<代码>字符< /代码>来判断你是否处于字符串的结尾。有更好的方法来解决这个问题(例如,通过查找
@
(通过
strcspn
或其他方式)的索引并执行
memcpy
),但是您的方法非常接近于工作,所以我们只需进行一些小的调整


正如其他人所指出的,问题在于这一行:

temp = strcat(temp, email[i]);
您可能正试图将
email
i
th位置的字符复制到
temp
的相应位置。但是,
strcat
不是正确的方法:
strcat
将数据从一个
char*
复制到另一个
char*
,即复制字符串。您只需要复制一个字符,这正是
=
所做的

从更高的层次来看(这样我就不会只告诉您答案),您需要将
temp
的适当字符设置为
email
的适当字符(您需要使用
I
email
temp
进行索引)

另外,请记住C中的字符串必须由
'\0'
终止,因此在复制完字符串后,必须将
temp
的下一个字符设置为
'\0'
。(在这个思路上,你应该考虑如果你的电子邮件字符串中没有<代码> @ /代码>,你的<代码>,循环将继续经过字符串<代码>电子邮件的< /代码>:请记住,你可以通过“代码>字符==‘0’< /CODE >或者只是使用<代码>字符< /代码>来判断你是否处于字符串的结尾。条件。)

指针。首先,strcat()返回一个char指针,C由于某种原因(我听说)无法将其转换为char数组。其次,strcat()的第二个参数应该是char指针,而不是char

替换
temp=strcat(temp,电子邮件[i])带有
temp[i]=电子邮件[i]应该可以做到这一点

此外,在循环结束后,使用空字符终止字符串

temp[i] = '\0';
(循环结束后,
i
等于提取字符串的长度,因此
temp[i]
是终端应该去的地方。)

指针。首先,strcat()返回一个char指针,C由于某种原因(我听说)无法将其转换为char数组。其次,strcat()的第二个参数应该是char指针,而不是char

替换
temp=strcat(temp,电子邮件[i])带有
temp[i]=电子邮件[i]应该可以做到这一点

此外,在循环结束后,使用空字符终止字符串

temp[i] = '\0';

(循环结束后,
i
等于提取字符串的长度,因此
temp[i]
是终端应该去的地方。)

“我有问题吗”您能描述一下什么问题吗?temp未初始化。temp不是一个左值。我特别写了它,有一个temp,你应该参考while循环,因为这就是问题…“我有问题吗”你能描述一下什么问题吗?temp是未初始化的。temp不是左值。我特别写了它,有一个temp,你应该参考while循环,因为这就是问题所在……你应该真正解释一下你在这里做什么。这个问题被标记为家庭作业。简单地抄袭你的答案对OP没有帮助。这是一个家庭作业扰流器。老师不会期望OP知道关于