这不是在端空格字符,但新行字符的序列,如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
返回。
根据操作系统,你也可以有一个“\ r”字符。 –
非常感谢伟大的解释。现在它像一个魅力工作:)再次感谢! –