1、改错:
(a)、void test1()
{
char string[10];
char *str1 = "0123456789";
strcpy(string, str1);
}
//strcpy会把/0也copy进来,此时数组已经越界,但是编译器不会检查数组越界问题,所以打印string时输出字符0123456789
(b)、void test2()
{
char string[10], str1[10];
for (i=0; i<10; i++)
{
str1[i] = 'A';
}
strcpy(string, str1);
}
//strcpy是以/0作为结束标志的,但是这个str1数组中没有/0
(c)、void test3(char *str)
{
char string[10];
if (strlen(str1)<=10)
{
strcpy(string, str1);
}
}
//string[10]在test3这个函数结束时会被释放。所以相当于没有赋值。
#include<stdio.h>
void test3(char *str)
{ //函数内定义的新的字符数组
char string[10];
if (strlen(str)<=10)
{ //如果str字符串小于10的话,就把str的字符复制给字符数组string[10]
strcpy(string, str);
}
}
//string[10]在test3这个函数结束时会被释放。所以相当于没有赋值。
2、找赛手:2个羽毛球队比赛,各出3人,每个人只比一次。甲队为A,B,C三人,乙队为X,Y,Z三人。有人打听比赛名单,A说他不和X比,C说不和X,Z比。编程找出三队赛手的名单.
#include<stdio.h>
int main(void)
{
int i=0;
char temp;
//先把一个队伍的顺序定好
char team1[3]={'A','B','C'};
//另外一个默认排序
char team2[3]={'X','Y','Z'};
//如果A和X对上了
if(team2[0]=='X')
{ //交换X和X后面的对手
temp = team2[1];
team2[1] = team2[0];
team2[0] = temp;
//如果C和X,Z对上了
if((team2[2]=='X')||(team2[2]=='Z'))
{ //交换值
temp = team2[2];
team2[2] = team2[1];
team2[1] = temp;
//交换后有可能从x交换成Z,从Z交换成了X,所以要再次判断一下
if((team2[2]=='X')||(team2[2]=='Z'))
{
temp = team2[2];
team2[2] = team2[0];
team2[0] = temp;
}
}
}
printf("%s\n%s\n",team1 ,team2);
return 0;
}
程序运行结果:
3、用C语言实现字符串中子字符串的替换, 成功返回0,失败返回-1.例如:“ABCDEFG”这个字符串,把其中”BCD”替换成“9527”这个子串,结果变成:“A9527EFG”
函数原型:
int str_replace(char * str, char * replaced_str, char *new_str)