Action()
{
char fullpath[] = "c:\\tmp\\logfile.txt";
char * first_t, * first_g, * first_b;
first_t = (char *) strchr(fullpath, 't');
lr_output_message ("The first t %s", first_t);
first_g = (char *) strchr(fullpath, 'g');
lr_output_message ("The first g %s", first_g);
first_b = (char *) strchr(fullpath, 'b');
lr_output_message ("The first b %s", first_b);
return 0;
}
strrchr与strchr相反
首先,数组和指针是不同的数据类型,有本质的区别:
char str[] = "hejk"; //sizeof(str) == 5 * sizeof(char)
char * str = "hejk"; //sizeof(str) == 4(x86) or 8(x64)
数组可以自动转型成指针,指针不能转成数组。
然后,字符串等价于字符数组,而不等于字符指针。根据上一条,字符串可以自动转型成字符指针。
再然后,"hejk"叫做“字符串字面量”,任何类型的字面量都是右值(没有名字的临时变量),必须让"hejk"成为左值(有名字的变量),才能够修改"hejk"这个字符串。
char str[] = "hejk";//等号两端是相同的数据类型,右值成为左值
char * str = "hejk";//等号两端是不同的数据类型,右端自动转型成char*,该char*得到了str的名字,而"hejk"这个char数组仍然没有名字
最后,"hejk"是局部字符数组,楼主的两个函数,在返回之后,"hejk"都将不复存在,而返回的值就是不复存在的数组的首地址,所以楼主的两个函数都是错误的,正确的是这样的:
char * str( )
{
static char str[] = "hejk";
return str;
}
静态局部数组被放在“全局变量区”,函数返回后,数组作为全局变量仍然存在。