我正在从简单的配置文件中读取路径,并使用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;
}
答案 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);