-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

これは、ローカル変数 array へのポインターを返すためですq。関数がその変数を返すと、それ以上存在しなくなり、ポインターを逆参照しようとすると、未定義の動作が発生します。

この関数について読むと、動的にメモリを割り当てstrdup、それを呼び出し元に返すことがわかります。

于 2016-01-14T08:43:28.073 に答える