奇怪的形状作为输出(字符串) - C语言

时间:2017-04-05 16:59:25

标签: string

所以我有一个问题。我必须分开电子邮件的名字,姓氏和主机名。 例如:

zephyr.extreme@gmail.com>>输入

输出=

名字= Zephyr

姓氏=极端

主机名= gmail.com

我没有得到理想的结果。我得到了一些奇怪的形状作为输出。

代码:

#include <stdio.h>

int main()
{
char email[40], first[20],last[20],host[30];
printf("Enter the email= ");
gets(email);
int i;
while(email[i]!='\0')
{
    while(email[i]!='.')
    {
        first[i]=email[i];
        i++;
    }
    while(email[i]!='@')
    {
        last[i]=email[i];
        i++;
    }
    while(email[i]!='\0')
    {
        host[i]=email[i];
        i++;
    }
}
puts(first);
puts(last);
puts(host);
}

3 个答案:

答案 0 :(得分:0)

所以我更新了代码,现在唯一的问题是最后的输出。

在主机名= gmail.com打印之后,然后还会打印一些额外的形状。这些是笑脸和一些奇怪的符号。

<强>代码

#include <stdio.h>

int main()
{
char email[40], first[20],last[20],host[30];
printf("Enter the email= ");
gets(email);
int i=0,j;
while(email[i]!='.')
{
    first[i]=email[i];
    i++;
}
i=0;
while(email[i]!='@')
{
    last[i]=email[i];
    i++;
}
j=i;
i=0;
while(email[j]!='\0')
{
    host[i]=email[j];
    j++;
    i++;
}
printf("First Name= ");
puts(first);
printf("Last name= ");
puts(last);
printf("Host name= ");
puts(host);
}

答案 1 :(得分:0)

C字符串('\0'指针)应为null-terminated。这意味着您的字符串在其末尾需要一个puts字符,以便字符串操作函数(如strlenputs知道它们的结束位置,与其他语言相对应,其中字符串的长度存储在一起用它。您看到的“怪异形状”只是在字符串结尾被解释为字符后存储的随机数据。当你调用'\0'时,它只是继续输出字节为字符,直到它随机找到一个值为'\0'的字节

您可以通过在每个写入字符串的块之后的字符串末尾添加while(email[i]!='.') { first[i]=email[i]; i++; } email[i] = '\0'; //same thing as email[i] = 0; but using a char makes what //you're doing clearer 字符来解决此问题。

val dynamoDbClient = AmazonDynamoDBAsyncClientBuilder
  .standard()
  .withRegion(Regions.US_EAST_1)
  .build()

答案 2 :(得分:0)

假设格式始终为first.last@host ...,请使用以下代码:

.getTag()