哎呀,这对c意味着什么?

时间:2011-05-20 14:50:51

标签: c

if ( sscanf( line, "%[^ ] %[^ ] %[^ ]", method, url, protocol ) != 3 )...

上述格式非常奇怪,它在做什么?

3 个答案:

答案 0 :(得分:7)

该行试图将3个不包含空格的空格分别读入方法,网址,协议,如果无法读取3,则输入if块。

答案 1 :(得分:3)

[]是扫描集。如果您告诉%[abcd],那么仅使用 a b c d 的输入字符串将被考虑。该字符串将在第一次出现时终止于大括号中的任何字符。

^内的[]用于表示大括号内的集合的补充。与格式字符串%[^abcd]一样,只接受 a b c 之外的所有字符 d

所以在%[^ ]中,空格后跟^告诉我,格式字符串将接受不的字符串中的任何字符组合em>有一个空白。

格式字符串"%[^ ] %[^ ] %[^ ]"将匹配一个字符串,该字符串具有由空格分隔的三个组件。每个组件都包含一系列字符,其中没有空格。

该函数返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败的情况下甚至为零。

因此,只有当且仅当读取了所有三个组件时,上述函数才会返回3,也就是说,输入行有三个分区,并且对于每个分区,三个数组method,{{填充了1}}和url

答案 2 :(得分:0)

scanf是一个从字符串中读取数据并返回成功读取的项目数的函数。

因此,scanf将解析line以找到包含空格的3个字符串并用空格分隔,并将这3个字符串放在后面的3个变量中(method,{ {1}},url)。

然后,如果它解析了3个参数,它将进入protocol块。