读书人

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

发布时间: 2012-03-27 13:44:24 作者: rapoo

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

读书人网 >C语言

热点推荐