如果您需要处理零字符的情况,那么可能fscanf()
不是正确的工具。有一个合理的论点fscanf()
很少是正确的工具;你会做得更好fgets()
和sscanf()
。
在这种情况下,我会收集行,直到有一个不是空白的(因为这就是它fscanf()
所做的),然后用 搜索#
符号strchr()
:
char line[4096];
while (fgets(line, sizeof(line), fp) != 0)
{
if (strspn(line, " \t\n") == strlen(line))
continue;
char *hash1 = strchr(line, '#');
if (hash1 == 0)
...error no hashes...
else
{
char *hash2 = strchr(hash1+1, '#');
if (hash2 == 0)
...second hash is missing...
if (hash2 - hash1 > MAX_PERMITTED_STRING_LEN)
...too long a string...
*hash2 = '\0';
char *res = strdup(hash1);
}
}