怎样将指针所指的字符串赋给字符数组?

#include<stdio.h> #include<string.h> #define M 20 void main() { int a,b,c,*p1,*p2,*p3,tmp; char str1[M],str2[M],str3[M],d[M],*p4,*p5,*p6,*tmp1; /* printf("输入3个整数\n"); scanf("%d%d%d",&a,&b,&c);*/ printf("输入3个字符串\n"); gets(str1);//getchar(); gets(str2);//getchar(); gets(str3);//getchar(); p1=&a;p2=&b;p3=&c; p4=str1;p5=str2;p6=str3;tmp1=d; /* if(*p1>*p2) { tmp=*p1;*p1=*p2;*p2=tmp; } if(*p2>*p3) { tmp=*p2;*p2=*p3;*p3=tmp; } if(*p1>*p2) { tmp=*p1;*p1=*p2;*p2=tmp; }*/ if(strcmp(str1,str2)>0) { tmp1=p4;p4=p5;p5=tmp1; &str1[]=p4;&str2[]=p5; } if(strcmp(str2,str3)>0) { tmp1=p5;p5=p6;p6=tmp1; // str2[0]=*p5;str3[0]=*p6; } if(strcmp(str1,str2)>0) { tmp1=p4;p4=p5;p5=tmp1; // str1[0]=*p4;str2[0]=*p5; } printf("%d %d %d\n",a,b,c); puts(p4);//printf("\n"); puts(p5);//printf("\n"); puts(p6);//printf("\n"); } 31行那一句,该怎么赋值?把指针所指的字符串重新赋给数组?

假如有char *p且p已指向一含有10个元素的字符数组,现有目标数组char b[10],则可以有三种函数可以实现字符串复制。

1、strcpy
语法格式: strcpy(目标地址,源地址)
此例语法:strcpy(b,p);
将源地址后的字符逐一复制到目标地址中,直到遇到结束符,如果源串中不含结束符就会造成目标数组越界。
2、strncpy
语法格式:strncpy(目标地址,源地址,字符长度)
此例语法:strncpy(b,p,10);
将源地址开始前n个(指定字符长度)字符逐一复制到目标地址中,不检测结束符也不检测边界,当指定长度大于目标数组长度则会越界。
3、memcpy
语法格式:memcpy(目标地址,源地址,字节长度)
此例语法:memcpy(b,p,sizeof(char)*10);
内存数据块复制,执行效率最高的一个。将源地址开始前n个(指定字符长度*字符的数据宽度)字节的内容复逐一复制到目标地址中,无视数组元素类型,只按字节复制,不检测数组边界,当指定长度大于目标数组长度则会越界。这里需要注意的是数组长度必须通过给定的元素类型获得数据宽度(sizeof(char))然后计算出实际的内存大小。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-24
比如:#include
<string.h>
void
main()
{
char
*p="abcde",c[10];
strcpy(c,p);
printf("%s",c);
}
结果:abcde
即可实现将
p的内容赋值给c.