有关char* 的处理

来源:百度知道 编辑:UC知道 时间:2024/05/24 10:18:08
char a[1024*1024];
a="Hello it is the first time I chat with you!";
//上面的已确定.
//我要判断a的前5个字符串是不是hello
//判断判断a的后5个字符串是不是hello
char b[5+1];
strcpy(b,a);//会因溢出报错,
b[5+1]='\0';//
if (b == "hello")

有没有其他好方法?

你这里错误的太多了

错误1:a是在栈上申请的,在这里你申请了1024*1024*4个字节=4M,C++默认栈的大小没这么大。

错误2:a="Hello it is the first time I chat with you!";

a在这里是个数组名,也可以把它当做一个指针常量<地址值不能改变>,你这个就

明显的改变了它

错误3:b[5+1]='\0';//

这里的数组的b是从b[0]到b[5]的.

警告4:if (b == "hello")

如果你这里只是用b的值和常量字符串的首地址进行比较,这个是没错的

可是这样好像有点没意义!

如果你是比较b数组对应的字符串和"hello"是否相等,那你这里就大错特错了.

改正办法:

char p[]="Hello it is the first time I chat with Hello";

char *befor=p,*last=p;

last+=(strlen(p)-5);

*(p+5)='\0';

if(!strcmp(befor,last)&&strcmp(befor,"Hello"));

printf("的确如此!");

return 0;

把strcpy改为strncpy(str1,str2,n)
就是赋值前n位的字符到b中。

定义一临时的字符串数组,存储a到前5个字符,别直接赋值啊。

strcpy溢出是当然的,两字符串大小天壤之别啊!
取每个字符单独拿出来判断最好。
首先判断a[0]是不是‘H’,然后判断a[1]是不是‘e’……以此类推,所以要用循环;