#include<stdio.h>
char copying(char *p)
{
char *p1;
while(*p!=”\0″)
{
*p1=*p;
p1++;
p++;
}
*p1=”\0″;
return *p1;
}
main()
{
char *p,s[80];
printf(“please input astring:\n”);
scanf(“%s”,s);
*p=copying(s);
printf(“%s”,*p);
}
char copying(char *p)
{
char *p1;
while(*p!=”\0″)
{
*p1=*p;
p1++;
p++;
}
*p1=”\0″;
return *p1;
}
main()
{
char *p,s[80];
printf(“please input astring:\n”);
scanf(“%s”,s);
*p=copying(s);
printf(“%s”,*p);
}
解决方案
10
#include<stdio.h>
#include “string.h”
void copying(char *p)
{
char p1[80];
int i=0;
int clen=strlen(p);//获得长度
while(i<clen)
{
p1[i]=*p;
p++;
i++;
}
for(int j=0;j<clen;j++)
{
printf(“%c”,p1[j]);
}
printf(“\n”);
}
main()
{
char *p,s[80];
printf(“please input astring:\n”);
gets(s);
copying(s);
}
帮你修改了一下。
#include “string.h”
void copying(char *p)
{
char p1[80];
int i=0;
int clen=strlen(p);//获得长度
while(i<clen)
{
p1[i]=*p;
p++;
i++;
}
for(int j=0;j<clen;j++)
{
printf(“%c”,p1[j]);
}
printf(“\n”);
}
main()
{
char *p,s[80];
printf(“please input astring:\n”);
gets(s);
copying(s);
}
帮你修改了一下。
10
#include<stdio.h>
char copying(char *p)
{
char *p1;
while(*p!=”\0″)
{
*p1=*p;//这是一个错误的做法。p1声明后,没有分配内存块,直接指向*p的值.p1会把值存放在哪里,这是一个未知的.
p1++;
p++;
}
*p1=”\0″;//这里j是什么意思?
return *p1;//返回”\0″?
}
main()
{
char *p,s[80];
printf(“please input astring:\n”);
scanf(“%s”,s);//这里不能用scanf,题主可以调试一下,假如用scanf获取字符串。然后把s做为实参给copying函数,会发现只得到两个字符。strlen(p)也得不到一个正常的长度。
*p=copying(s); //copying函数里最后return *p1 是返回”\0″,题主你知道吗?就算copying函数里前面的步骤不出错,这里也是错误的。
printf(“%s”,*p);
}
char copying(char *p)
{
char *p1;
while(*p!=”\0″)
{
*p1=*p;//这是一个错误的做法。p1声明后,没有分配内存块,直接指向*p的值.p1会把值存放在哪里,这是一个未知的.
p1++;
p++;
}
*p1=”\0″;//这里j是什么意思?
return *p1;//返回”\0″?
}
main()
{
char *p,s[80];
printf(“please input astring:\n”);
scanf(“%s”,s);//这里不能用scanf,题主可以调试一下,假如用scanf获取字符串。然后把s做为实参给copying函数,会发现只得到两个字符。strlen(p)也得不到一个正常的长度。
*p=copying(s); //copying函数里最后return *p1 是返回”\0″,题主你知道吗?就算copying函数里前面的步骤不出错,这里也是错误的。
printf(“%s”,*p);
}
10
不看其他的,首先main函数里char *p,*p=…就错了
20
1.返回的应该是char *
2.应该在copying函数里malloc一块空间用来存放拷贝的字符串
3.用一个指针记录p1最初始的位置,原因是你之后有++操作,p1指向会后移
2.应该在copying函数里malloc一块空间用来存放拷贝的字符串
3.用一个指针记录p1最初始的位置,原因是你之后有++操作,p1指向会后移
#include<stdio.h>
#include<stdlib.h>
char *copying(char *p)
{
char *p1 = (char *)malloc(80);
char *res = p1;
while(*p!="\0")
{
*p1=*p;
p1++;
p++;
}
*p1="\0";
return res;
}
void main()
{
char *p,s[80];
printf("please input astring:\n");
scanf("%s",s);
p=copying(s);
printf("%s\n",p);
}
20
第一,字符串是char*,字符是char
第二,你主函数中的的p都没有申请内存,你不能直接使用*p
所以:
第二,你主函数中的的p都没有申请内存,你不能直接使用*p
所以:
#include<stdio.h>
char* copying(char *p)
{
char *p1;
while(*p!="\0")
{
*p1=*p;
p1++;
p++;
}
*p1="\0";
return p1;
}
main()
{
char *p,s[80];
printf("please input astring:\n");
scanf("%s",s);
p=copying(s);
printf("%s",*p);
}
10
只是保存一下p1最初始的地址,否则的话你之后++了,return的时候返回的是最后一个\0的地址
5
你copying函数里也要分配内存,上面代码没帮你改
5
1 #include<stdio.h>
1
2 #define MAX_LEN 128
3
4 char *copying(char *p)
5 {
>> 6 char *p1 = malloc(sizeof(char) * MAX_LEN);
7 if (NULL == p1) { //判断申请结果
>> 8 | fprintf(stderr, "malloc Error: %s\n", strerror(errno));
9 | return NULL;
10 }
11 char *ptmp = p1;
12 while(*p!="\0") {
13 | *ptmp++ = *p++;
14 }
15 *ptmp = "\0"; //字符串结束标志,添加上
16
17 return p1;
18 }
19 int main(void)
20 {
21 char *p = NULL, s[80];
22 printf("please input astring:\n");
23 scanf("%s", s);
24 p = copying(s);
25 printf("%s\n", p);
>> 26 free(p); //用完释放
27
28 return 0;
29 }
5
#include<stdio.h>
#include<stdlib.h>
char * copying(char *p)
{
char *p1,*p2;//申请一个p2用来记录p1的起始位置,原因是后面p1的志向发生了变化,返回时要返回p2
p2=p1=(char *)calloc(1,100);
while(*p!="\0")
{
*p1=*p;
p1++;
p++;
}
*p1="\0";
return p2;
}
void main()
{
char *p=NULL,s[80];
printf("please input astring:\n");
scanf("%s",s);
p=copying(s);
printf("%s\n",p); //输出的是p而不是*p
}
5
内存用完之后可以free掉,切记free的是内存而不是指针