ch仅仅是个字符数组指针,你都没有向系统申请内存来存放字符数组,输入字符串当然造成向未知内存空间写数据的错误。
为正安等地区用户提供了全套网页设计制作服务,及正安网站建设行业解决方案。主营业务为网站设计制作、成都网站建设、正安网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
直接char a[MAX][81];
for(int i=0;ik;i++)
cina[i];
就行了
现写的 差不多 看好给分
字符串复制
char* string_copy(char* pdest, char* psource)
{
if(psource == NULL)
{
pdest = NULL;
return pdest;
}
while ((*pdest++=*psource++)!='\0');
return pdest;
}
字符串连接
char *string_strcat(char* s1, char* s2)
{
char *p = s1;
while(*p++);
--p;
while(*p++ = *s2++)
return s1;
}
字符串比较长度
int string_compare(char* s1, char* s2)
{
char *p1 = s1;
char *p2 = s2;
int i =0, j=0;
while(*p1++)
++i;
while(*p2++)
++j;
if (i j) return 1;
if (i == j) return 0;
if (i j) return -1;
}
直接对指针进行赋值即可实现把一个指针的内容复制到另一个指针。
下面举例来说明具体的操作过程:
int *p1=(int *)malloc(sizeof(int)); // 定义一个int类型的指针变量p1,并分配存储单元
int *p2; // 定义一个int类型的指针变量p1,没有分配存储单元
*p1 = 4; // 对指针p1指向的存储单元赋值
p2 = p1; // 将指针p2也指向指针p1指向的存储单元,即*p2=4
printf("%d", *p2); // 输出4
#includestdio.h
int main()
{
void copy(char *from,char *to);
char a[81]; //源串数组
char b[81]; //目标串数组,此数组要保证不小于源串,不然,数据会产生越界问题
printf("input a string:" );
gets(a); //输入一个字符串数据,如:hello,world
copy(a,b);
printf("%s\n",b);
return 0;
}
void copy(char *from,char *to)
{
for(;*from!='\0';from++,to++)
{
*to=*from;
}
*to='\0';
}
#include stdio.h
#include string.h
int copystring(char *str2, char *str1);
int main()
{
char str1[30] = "hello,string copied!\n";
char str2[30];
printf("str2[30]=%d\n", copystring(str1, str2)); // 你的copystring函数需要的参数是两个字符型指针,而数组名本身就可以作指针来使用,str1[30]指的是字符数组str1中第31(从0开始,这里实际上越界了)个元素的地址
return 0;
}
int copystring(char *str2, char *str1)
{
printf("str2 is %s\n", str2);
strcpy(str1, str2); // strcpy函数第一个参数是复制后存放的数组,第二个才是要复制的对象
return *str2; // 我不太理解你这个函数想返回什么,你现在做的是将str2[0]的值以整型返回(h的ASCII码对应104)
}
如果还有什么问题可以追问
#includelt;stdio.hgt;
#includelt;assert.hgt;/*断言的头文件*/
char*my_strcpy(char*dest,const char*src)
/*传参,把src依次传给dest,指针数组,每一个都是地址*/
{
char*ret=p;/*接收的为地址*/
assert(src!=NULL);
/*,使用指针一定要先用查找函数判断是否为空,防止不小心将空地址传递*/
while(*dest++=*src++)
{
;
}
return p;/*返回的ret为字符串则用char,且为地址*/
}
int main()
{
char arr1[]="Hello world!";
char arr2[20];
char*ret=my_strcpy(arr2,arr1);
printf("%s",ret);/*打印出的为字符串*/
return 0;
}
扩展资料:
用法://以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开)
#includelt;stdio.hgt;
int main()
{
int i,j;
scanf("%d%d",i,j);
printf("i=%d;j=%d",i,j);
return 0;
}
//以下程序用于输出“百度百科”
#includelt;stdio.hgt;
int main()
{
printf("百度百科");
return 0;
}
format
Format参数是包含三种对象类型的一个字符串:
*无格式字符复制到输出流;
*转换规范,每个规范导致在值参数列表中检索1个或更多个项;
*转义序列。
通常意义上format的格式如下:
%[flags][width][.prec][F|N|h|l]type
规定输出数据的格式,具体如下:
注:%g、%G在小数点位数四位或指数大于等于精度时用%e、%E,否则用%f。
参考资料:
百度百科——printf