-1

这是代码:

#include <stdio.h>

char *strDup(char *,int);

int main (void)
{
   char p[1000];
   int n=0;
   char *q;

   printf("plz enter a string : ");
   gets(p);
   printf("plz enter the number of the characters you want to duplicate : ");
   scanf("%d",&n);
   printf("the duplicated string is : ");
   q=strDup(p,n);
   printf("%s\n",q);
   return 0;
   }
char *strDup(char *p,int n)
{
   int ctr=0;
   int help;
   char q[1000];

   for(int i=0;p[i]!='\0';i++)
   {
        ctr++;
   }
   if (n<0)
   {
        printf("!!ERROR!!");
   }
   else if(n==0||n>ctr)
   {
       for(int i=0;p[i]!='\0';i++)
       {
            help=p[i];
            p[i]=q[i];
            q[i]=help;
       }
   }
   else
   {
        for(int i=0;p[i]<=n;i++)
        {
            help=p[i];
            p[i]=q[i];
            q[i]=help;
        }
    }
    return q;
 }

即使在编辑之后,它也不起作用,我试图让代码对我来说尽可能简单,所以请不要让我很难。

4

1 回答 1

1

这是因为您返回一个指向局部变量数组的指针q。一旦函数返回该变量不再存在,并且试图取消引用指针将导致未定义的行为

如果你读过这个strdup函数,你会看到它动态分配内存,然后返回给调用者。

于 2016-01-14T08:43:28.073 回答