首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言的字符串参数有关问题

2012-03-27 
C语言的字符串参数问题char*strstr_rem(char*string,char*substring){//在string字符串中册除substring子

C语言的字符串参数问题
char   *strstr_rem(char   *string   ,char   *substring){
//在string字符串中册除substring子字符串
int   i,j,k   ,loc=-1;
for(i=0;string[i]   &&   (loc==-1);i++)
{
for(j=i,k=0;string[j]==substring[k];j++,k++)
if(!substring[k+1]){
loc=i;
break;
}
}
if(loc!=-1){//substring   was   found
for(i=0;substring[i];i++)
;
for(j=loc,k=loc+i;string[k];j++,k++)
string[j]=string[k];
string[j]= '\0 ';
}
return   string;
}


而当执行如下语句时,却会发生错误:
printf( "%s ",strstr_rem( "figozheng ", "go "));

为什么?

[解决办法]
你的函数在写常量区


[解决办法]
"figozheng "字符常量问题
要先 char a[]= "figozheng ";
printf( "%s ",strstr_rem(a, "go "));
[解决办法]

char str[] = "figozheng ";
char sub[] = "go ";

printf( "%s ",strstr_rem(str, sub));

这样
[解决办法]
你这个函数的内部应该完成对参数的拷贝, 而不是直接操作.
[解决办法]
我也知道楼上的做法,但我想明确知道为什么printf( "%s "strstr_rem( "figozheng ", "go "));
会出现错误,是不是实参"figozheng "的生命周期只在这个函数里面,还是这个实参是个常量,存储在常量区,不允许修改?

---------是不允许修改的。
[解决办法]
对C的字符串,函数只是得到了指向字符的一个指针,真正的字符数据只有函数外面的一个。你这里直接对字符串字面值操作,自然会有问题
[解决办法]
不能修改字符串常量
用字符数组
[解决办法]
字符串常量不可修改,要放入数组之后再做参数,才能修改

热点排行