[ad_1]
下面的代码:
C
#include <stdio.h> int main(void) { char buf[80] = "salam"; const char *fmt = "\"%79[^\"]\""; int n; n = sscanf("\"\"", fmt, buf); printf("%d fields were read. buf = '%s'\n", n, buf); n = sscanf("\"hamidi\"", fmt, buf); printf("%d fields were read. buf = '%s'\n", n, buf); }
输出:
已读取 0 个字段。 buf=“萨拉姆”
已读取 1 个字段。 buf=“哈米迪”
这表明 sscanf 函数无法读取具有指定格式字符串的空字符串。 是否有一个很好的替代正则表达式格式字符串来通过 sscanf 函数读取长度为零到最多 79 个字符的字符串? 换句话说,我希望第一个 sscanf 将 ‘\0’ 插入到 buf[0] 并返回 1 而不是 0。有办法吗?
我尝试过的:
这只是一个问题。 这不是我必须尝试的事情。
解决方案1
更好的选择是使用 弗格茨[^]。 它包括读取的换行符,但可以使用如下函数轻松删除换行符:
C
void StripChar( char * buffer, int chr ) { char * p = strchr( buffer, chr ); if( p ) * p = 0; }
这是一个小样本:
C
#define BUFFER_SIZE 79 char buffer[ BUFFER_SIZE + 1 ] = { 0 }; fgets( buffer, BUFFER_SIZE, stdin ); StripChar( buffer, '\n' );
[ad_2]
コメント