2012-11-02 72 views
0

我正在从一个简单的配置文件读取的路径,并将其存储在使用C语言字符数组阅读。我想出了一个办法做到这一点,但有一个问题,没有空格连接它的结束检索路径。请帮助我找到一个更好的方法来做到这一点。从配置文件

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; 
} 

回答

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()读取的换行符。

当打印字符串我觉得有用的字符串,里面放上[]使字符串更清晰的内容:

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

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

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

return strdup(buff); 

webroot()调用者必须free()返回值。排列如果发生故障的是NULL返回。

+0

根据操作系统,你也可以有一个“\ r”字符。 –

+0

非常感谢伟大的解释。现在它像一个魅力工作:)再次感谢! –

1

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

0

您是否尝试过使用的fscanf?

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