第一个问题:
#include <iostream> #include <math.h> #include <cstring>//字符处理库 #include <iomanip>//setw(行宽) #include <cstdio> using namespace std; int main(){ char a[9],b[9];//问题在这里,开辟的数组空间为什么假如是3的话会报错呢? a[0]="a"; a[1]="a"; a[2]="a"; b[0]="b"; strcpy(a, b); cout<<a; }
第二个问题:
假设a,b是两个char[]字符串,a中已经有值,那么假如本人想要把b中的元素全部赋值到a中,在使用strcpy时需不需要先memset(a,0,sizeof(a));这样清空一下a中的值。
第三个问题:
memset(a,0,sizeof(a));这里给a每个元素都赋值为0是什么意思?这里肯定不是整型的0了,原因是整形的零是48.(ascii码表)
假如这点不清楚的话对后面学习会有很大阻碍。
第四个问题:
有时候本人用strcpy时会出现有残余元素的问题,例如:原来a是{“1″,”2″,”3”},b是{“b”,”b”},这时候在使用strcopy(a,b);后a会变成{“b”,”b”,”1″};直接这样写应该是没有问题,但当本人写在算法题中就会出现相似这种问题。
请高手赐教,感激不尽!
解决方案
12
1、语法没错,运行时可能出问题
2、不需要
3、清空,使数组内存储确定的初值;就是数0的编码,或说字符”\0″的编码,不是字符”0″的编码
4、原来a是{“1″,”2″,”3”},b是{“b”,”b”},这时候在使用strcopy(a,b);后a会变成{“b”,”b”,”1″};:不会的,a会变成{“b”,”b”,?},原因是不知道b后面到多远才能遇到”\0″。
5、C库函数strXXX都是处理字符串的,用之前要保证数组有充足的空间,本人存入的东西必须以”\0″结束
2、不需要
3、清空,使数组内存储确定的初值;就是数0的编码,或说字符”\0″的编码,不是字符”0″的编码
4、原来a是{“1″,”2″,”3”},b是{“b”,”b”},这时候在使用strcopy(a,b);后a会变成{“b”,”b”,”1″};:不会的,a会变成{“b”,”b”,?},原因是不知道b后面到多远才能遇到”\0″。
5、C库函数strXXX都是处理字符串的,用之前要保证数组有充足的空间,本人存入的东西必须以”\0″结束
12
1.不需要,但是要保证目标字符串的空间足够!
C字符串是以”\0″结尾的字符串,所以你b不是你期望的那个字符串,会一直寻找下去直至找到结束符”\0″位置,此时假如你目标字符串a空间不够可能导致奔溃
char a[3], b[3];
b[0] = “b”;
b[1] = “\0”; //你必须给你数组手动设置结束符
strcpy(a, b);
不同于
char b[3] = “b”; //这里是双引号
此时 b[0] == b, b[1] = “\0”
这样子赋值就在最后插入结束符
C字符串是以”\0″结尾的字符串,所以你b不是你期望的那个字符串,会一直寻找下去直至找到结束符”\0″位置,此时假如你目标字符串a空间不够可能导致奔溃
char a[3], b[3];
b[0] = “b”;
b[1] = “\0”; //你必须给你数组手动设置结束符
strcpy(a, b);
不同于
char b[3] = “b”; //这里是双引号
此时 b[0] == b, b[1] = “\0”
这样子赋值就在最后插入结束符
28
1.在本人这里即使是9也会报错。关键在于你的b数组没有清零,也没用主动补上”\0″,所以strcpy的时候可能会越界
2.最好都memset一下,养成良好的习惯
3.这个0是ASCII为0的字符
4.这个应该是你没将b清零吧,同时也没有主动补上”\0″
2.最好都memset一下,养成良好的习惯
3.这个0是ASCII为0的字符
4.这个应该是你没将b清零吧,同时也没有主动补上”\0″
#include <iostream> #include <math.h> #include <cstring>//字符处理库 #include <iomanip>//setw(行宽) #include <cstdio> using namespace std; int main(){ char a[3], b[3];//问题在这里,开辟的数组空间为什么假如是3的话会报错呢? a[0] = "a"; a[1] = "a"; a[2] = "a"; b[0] = "b"; b[1] = "\0"; strcpy(a, b); cout << a; }
12
第一个问题:原因是你只存了3个成员,开辟3个也是够用的。问题出在你用字符串操作函数,但没有遵守字符串操作函数的约定,约定是:字符串操作函数操作的数组必须是以”\0″作为结尾的。原因是你的数组里面没有\0所以会出问题。
第二个问题:不需要,会覆盖掉a中的内容。前提是b遵循字符串的字符数组规定。并且a的空间大于等于b的空间。
第三个问题:全部置0,原因是数值0,就是字符”\0″,相当于字符串的结束符。假如这句放在给a,b的元素赋值之前,你的程序就不会有问题了。
第四个问题:不是你说的那样,应当是这样:假如a[]=”12345″,b[]=”bb”;strcpy(a,b);之后a是 “bb\045”;原因是字符串以\0结束,\0之后的内容是无效的所以a里面的内容相当于就是”bb”
第二个问题:不需要,会覆盖掉a中的内容。前提是b遵循字符串的字符数组规定。并且a的空间大于等于b的空间。
第三个问题:全部置0,原因是数值0,就是字符”\0″,相当于字符串的结束符。假如这句放在给a,b的元素赋值之前,你的程序就不会有问题了。
第四个问题:不是你说的那样,应当是这样:假如a[]=”12345″,b[]=”bb”;strcpy(a,b);之后a是 “bb\045”;原因是字符串以\0结束,\0之后的内容是无效的所以a里面的内容相当于就是”bb”