如何将字符指针传递给函数

时间:2017-02-16 04:30:24

标签: c string pointers

我正在尝试解决一个问题,我必须使用字符指针并存储电子邮件,然后将该指针传递给函数,以便我可以验证输入字符串中是否有任何特殊字符。 这是代码

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

void verify(char** em)
{
    char *z = *em;

    while(*z)
    {
        printf("%c", *z++);  
    }

    while(*z != '\n')
    {
        if(*z == 'a')
        {
            printf("present");
            *z++;
        }
        else
        {
            printf("not present");
        }
    }
}

int main()
{
    int count = 0;
    char *email = malloc(sizeof(char) * 100);

    printf("enter the email id\n");
    scanf("%100s", email);

    while(*email)
    {
        printf("%c", *email++);  
    }

    verify(&email);
    return 0;
}

每当我将字符指针传递给我的函数verify()并尝试打印字符串时,我都无法获得所需的输出。

如何使用此功能验证输入的电子邮件是否有效? 我想找到&#39; @&#39;的指数并在@之前和之后检查字符,但我不知道如何存储&#39; @&#39;的索引。因为它不是一个数组。

2 个答案:

答案 0 :(得分:1)

问题1

while(*email)
    printf("%c",*email++);

移动email,使其指向循环结束时字符串的结尾。您需要跟踪email的原始值。

char* it = email;
while(*it)
    printf("%c",*it++);

问题2

您没有释放调用malloc时收到的内存。

问题3

 while(*z)
   printf("%c",*z++);

移动z,使其指向循环结束时字符串的结尾。您需要将其重置为指向字符串的开头。

问题4

然后,你有

  if(*z=='a')
  {
     printf("present");
     *z++;
  }

这是一个问题。除非z*z,否则'a'不会移动。

修正了verify

// You don't need the input to be of type char**
void verify(char* em)
{
   char *z = em;
   while(*z)
      printf("%c",*z++);

   // Reset where z points
   z = em;

   while(*z!='\n')
   {
      if(*z=='a')
      {
         printf("present");
      }
      else printf("not present");

      // Move z regardless of the value of *z
      ++z;
   }
}

修正了main

int main()
{
    int count=0;
    char *email=malloc(sizeof(char)*100);
    printf("enter the email id\n");
    scanf("%100s",email);

    char* it = email;
    while(*it)
        printf("%c",*it++);

    // Just use email, not &email
    verify(email);

    // Deallocate memory
    free(email);

    return 0;
}

答案 1 :(得分:0)

不要在那里使用*?++。你不能确定它是否像*?,?++或*?,(*?)++。

 void verify(char* em){
 char *z = em;
 while(*z)
 printf("%c",*(z++));//do you realy need to print the email more than once?
 //in the verify() and the main()
// Reset where z points
z = em;

   while(*z!='\n'&&*z!='\0')
   {
  if(*z=='a')
  {
     printf("present");
  }
  else printf("not present");

  // Move z regardless of the value of *z
  ++z;
   }
  }


int main()
{
int count=0;
char *email=malloc(sizeof(char)*100);
printf("enter the email id\n");
scanf("%100s",email);

char* it = email;
while(*it)
    printf("%c",*(it++));

// Just use email, not &email
verify(email);

// Deallocate memory
free(email);

return 0;
}