这个格式说明符在 C 中表示 %[^,] 是什么意思?
what is this format specifier means %[^,] in C?
我有一个这样的代码片段
while( fscanf(b,"%c,%[^,],%[^,],%f",&book.type,book.title,book.author,&book.price)!=EOF)
正在阅读 fscanf
的格式字符串部分
具体这部分
matches a non-empty sequence of character from set of characters. If
the first character of the set is ^, then all characters not in the
set are matched.
因此,该格式说明符匹配除 ,
字符以外的所有字符(在您的格式字符串中随后匹配)。所以,如果你有一个像
这样的结构
typedef struct Book_t {
char type;
char title[100];
char author[100];
float price;
}Book ;
然后有一个包含架构中数据的文件:
BookType,BookTitle,BookAuthor,BookPrice
然后 once 可以将每一行读入 book
as
fscanf(b,"%c,%[^,],%[^,],%f",&book.type,book.title,book.author,&book.price)
对于文件的一行为:
A,old man and the sea,ernest hemingway,12.5
A
将被读入 book.type
,然后所有 not 匹配逗号的字符将被读入,这样会读入直到 sea
并停止,因为下一个字符是 ,
。此 ,
将与格式字符串中的 ,
匹配。作者字段将重复相同的过程。
请注意,读入未指定数量的字符直到匹配在逗号之前停止是个坏主意,因为它读入的缓冲区通常是固定长度的。这就是为什么在这样做时最好指定最大宽度(考虑空字符)的原因。继续上面的例子,这看起来像
fscanf(b,"%c,%99[^,],%99[^,],%f",&book.type,book.title,book.author,&book.price)
要让 99 表示它最多只能匹配 99 个字符以避免任何缓冲区溢出,因为缓冲区 title
最多只能容纳 100 个字符并且至少需要一个字节[=25=]
个字符。
我有一个这样的代码片段
while( fscanf(b,"%c,%[^,],%[^,],%f",&book.type,book.title,book.author,&book.price)!=EOF)
正在阅读 fscanf
具体这部分
matches a non-empty sequence of character from set of characters. If the first character of the set is ^, then all characters not in the set are matched.
因此,该格式说明符匹配除 ,
字符以外的所有字符(在您的格式字符串中随后匹配)。所以,如果你有一个像
typedef struct Book_t {
char type;
char title[100];
char author[100];
float price;
}Book ;
然后有一个包含架构中数据的文件:
BookType,BookTitle,BookAuthor,BookPrice
然后 once 可以将每一行读入 book
as
fscanf(b,"%c,%[^,],%[^,],%f",&book.type,book.title,book.author,&book.price)
对于文件的一行为:
A,old man and the sea,ernest hemingway,12.5
A
将被读入 book.type
,然后所有 not 匹配逗号的字符将被读入,这样会读入直到 sea
并停止,因为下一个字符是 ,
。此 ,
将与格式字符串中的 ,
匹配。作者字段将重复相同的过程。
请注意,读入未指定数量的字符直到匹配在逗号之前停止是个坏主意,因为它读入的缓冲区通常是固定长度的。这就是为什么在这样做时最好指定最大宽度(考虑空字符)的原因。继续上面的例子,这看起来像
fscanf(b,"%c,%99[^,],%99[^,],%f",&book.type,book.title,book.author,&book.price)
要让 99 表示它最多只能匹配 99 个字符以避免任何缓冲区溢出,因为缓冲区 title
最多只能容纳 100 个字符并且至少需要一个字节[=25=]
个字符。