1、使用指针形式的形参作为返回值时,无返回
char *strtrimr(char *pstr)
{
int i;
i = strlen(pstr) - 1;
while (isspace(pstr[i]) && (i >= 0))
pstr[i--] = '\0';
return pstr;
}
char *strtriml(char *pstr)
{
int i = 0,j;
j = strlen(pstr) - 1;
while (isspace(pstr[i]) && (i <= j))
i++;
if (0<i)
strcpy(pstr, &pstr[i]);
return pstr;
}
char *strtrim(char *pstr)
{
char *p;
p = strtrimr(pstr);
return strtriml(p);
}
int get_string(const char*key,char *string)
{
FILE *fp;
char line[100];
fp = fopen(config_file, "r");
if(fp == NULL){
perror("Open Config File");
return -1;
}
while(fgets(line, 100, fp)){
char *p = strtrim(line);
int len = strlen(p);
if(len < 0 ) continue;
if(p[0] == '#') continue;
if(p[0] == '[') continue;
if(strstr(p,key) == 0)continue;
string = strtrim(strchr(p,'=')+1);
break;
}
fclose(fp);
return 0;
}
在使用get_string获取文件里的某个值时,并未返回该值。
我的解决办法:
sprintf(string,"%s",strtrim(strchr(p,'=')=1);
另外,需要为实参string分配内存,如:
char *string = (char *)malloc(10);
...
free(string);
2、使用stat()函数获取文件状态信息时,如大小,将得到非常大或非常小的值,可以利用某个状态值判断文件是否存在。
3、strtok使用时的段错误
函数原型:
#include <string.h>
char *strtok(char *s, const char *delim);
使用时,如果传递给参数s的是字符常量则执行时会出现Segment fault(段错误)。
原因是,C程序运行时将字符常量存储于只读区域,而strtok操作过程中会修改参数s的值,因此,产生错误。为了避免产生这种错误,编程时要保证传给strtok函数s的值不是常量。比如,将字符串字义为字符数组。