首页 > 教育

stract函数两种写法为什么结果不同,strcpy函数两种写法为什么相同

更新时间2019-03-10 22:02:23

//strcat

#include<stdio.h>

#include<string.h>

int main(void){

char str2[20]="jkl";

strcat(str2,"p");

puts(str2);

return 0;

}

------------------------------

#include<stdio.h>

#include<string.h>

int main(void){

char str2[20];

str2[20]="jkl";

strcat(str2,"p");

puts(str2);

return 0;

----------------------------------

 -----------------------------------

//strcpy

#include<stdio.h>

#include<string.h>

int main(void){

char str2[20]="jkl";

strcpy(str2,"p");

puts(str2);

return 0;

}

-------------------------------

#include<stdio.h>

#include<string.h>

int main(void){

char str2[20];

str2[20]="jkl";

strcpy(str2,"p");

puts(str2);

return 0;

}


你的每个程序的第二个都有3个错(基本的概念)

1.c语言的字串只能用=初始化,不能直接用=赋值的

2.字符串与字符是两个不同的概念

3.数组下标从0开始,最大下标只能用定义的n-1

char str2[20]="jkl"; //正确,它是初始化

str2[20]="jkl"; //错(当然,语法上可能只是一个警告,但逻辑上大错了)

你的原意是与初始化一样,给str2串赋值,但违反了第1条,C的字串是不能直接用=赋值的

而实际上str2[20]表示了str2串的第20个成员,而它已是下标溢出了(第3条),因为str2只能用到str2[0]~str2[19],且str[20]它只是一个字符变量,只能放下一个字符(第2条)

char s[3];

s[0]='1';

s[1]='2';

s[3]=''; //C字串以结束

你相当于写成s[3]="xxx";

那肯定不对了(下标溢出。结果“不可预见”)

一定要注意,字串str2与字符str2[x]是不同的类型,前者可以放一个串,后者只能放一个字符


上一篇:一列数:1、2、3、4、3、4、5、6、5、6、7、8、9、10...第1994个数是几?

下一篇:解决问题,过程