我使用fscanf解析文本(css)文件。基本目标很简单;我想提取任何符合此模式的内容:C:fscanf和字符/字符串大小
@import“some/file/somewhere.css”;
所以我使用fscanf,告诉它读取和丢弃所有的'@'字符,然后存储所有内容,直到到达';'字符。这是这样的功能:
char* readDelimitedSectionAsChar(FILE *file)
{
char buffer[4096];
int charsRead;
do
{
fscanf(file, "%*[^@] %[^;]", buffer, &charsRead);
} while(charsRead == 4095);
char *ptr = buffer;
return ptr;
}
我已经创建了一个缓冲区,应该可以容纳4095个字符,据我所知。但是,我发现事实并非如此。如果我有一个包含匹配字符串的文件很长,如下所示:
@import“some/really/really/really/long/file/path/to/a/file”;
使用char [4096]的缓冲区将其截断为31个字符。 (如果我使用printf来检查缓冲区的值,我发现该字符串被缩短了。)
如果我增加缓冲区大小,则会包含更多的字符串。我的印象是一个字符需要一个字节(尽管我知道这受到编码的影响)。我正在尝试了解这里发生了什么。
理想情况下,我希望能够将缓冲区设置为需要“即时”的大小 - 也就是说,fscanf只需创建足够大的缓冲区来存储字符串。这可以做到吗? (我知道GNU的%作为标志,但这是OS 10.5/10.6的Mac应用程序,我不确定这是否可以在此平台上使用。)