从配置文件中读取

时间:2012-11-02 08:25:05

标签: c file-io fgets

我正在从简单的配置文件中读取路径,并使用C语言将其存储到char数组中。我提出了一种方法来做到这一点,但是检索路径时没有附加空格的路径有问题。请帮我找到更好的方法。

char* webroot(){
 FILE *in = fopen("conf", "rt");
 char buff[1000];
 fgets(buff, 1000, in);
 printf("first line of \"conf\": %s\n", buff);
 fclose(in);

 return buff;
}

3 个答案:

答案 0 :(得分:2)

结尾处不是空白字符序列,而是新行字符,因为fgets()将其包含在返回的缓冲区中:将\n替换为空终止符:

/* fgets() will not read the new-line if
   there is not sufficient space in the buffer
   so ensure it is present. */
char* nl_ptr = strrchr(buff, '\n');
if (nl_ptr) *nl_ptr = '\0';

由于stdout上有明显的换行符,可能看起来好像有一个空白字符序列,但这是由于fgets()读取的新行字符的存在。 / p>

打印字符串时,我发现将字符串放在[]中以使字符串内容更清晰是有用的:

printf("first line of \"conf\": [%s]\n", buff);

这会使fgets()获得的新行字符的存在更加明显。

请注意,函数webroot()返回局部变量buff的地址:这是一个错误,是未定义的行为。需要使用strdup()(如果可用)或malloc()strcpy()来动态分配新缓冲区:

return strdup(buff);

webroot()的来电者必须free()返回的值。安排在发生故障时返回NULL

答案 1 :(得分:1)

您可以使用fscanf(fp, "%s", buff)读取不带空格的字符串。要防止缓冲区溢出,请添加限制fscanf(fp, "%999s", buff)

答案 2 :(得分:0)

您是否尝试过使用fscanf?

fscanf(in, "%s", buff);