编写练习题遇到一些错误,不知道怎么办啊
题目: 编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。例如调用
p= strdup(str);
将为和str相同的字符串分配空间,并且把字符串str的内容复制给新字符串,然后返回指向新字符串的指针,如果非配失败则返回空指针。
我的代码是:
#include "stdafx.h"
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
strdup(char *str,int n)
{
int i;
char *p;
p=(char *)malloc(sizeof(char)*n);
if(p==NULL)
{
printf("程序出错\n");
return(p==NULL);
}
else
{
for(i=0;i<=n;i++)
p[i]=str[i];
}
putchar('\n');
return *p;
}
void main()
{
char *str;
int n,i;
char *p;
printf("请输入字符串个数 :",&n);
scanf("%d",&n);
str=(char *)malloc(sizeof(char)*n);
if(str==NULL)
{
printf("程序出错\n");
exit(0);
}
else
{
printf("请输入%d个字符:\n",n);
for(i=0;i<=n;i++)
scanf("%c",&str[i]);
}
p=(char*)strdup(str,n);
printf("复制字符串为:");
for(i=0;i<=n;i++)
printf("%c",p[i]);
free(str);
free(p);
}
但是一直不能正确运行,请大神们看看啊
[解决办法]
//稍微改了一下
char* strdup(char *str, int n)
{
int i;
char *p;
p = (char *)malloc(sizeof(char) * (n + 1));
if(p==NULL) {
printf("程序出错\n");
return NULL;
} else {
memset(p, '\0', n + 1);
for(i = 0; i < n; i++)
p[i] = str[i];
}
// putchar('\n');
return p;
}
[解决办法]
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
char *strdup(int n)
{
int i;
char *p,a;
p=(char *)malloc(sizeof(char)*n);
if(p==NULL)
{
printf("程序出错\n");
exit(0);
}
else
{
for(i=0;i<n;i++){
scanf("%c",&a);
p[i]=a;}
return p;
}
free(p);
}
void main()
{
int n,i;
char *p;
printf("请输入字符串个数 :");
scanf("%d",&n);
p=strdup(n);
printf("复制字符串为:");
for(i=0;i<n;i++)
printf("%c",p[i]);
}