我想使用sscanf从字符串中提取一个数字。
数字介于“=”和“;”
之间 #include <stdio.h>
int main() {
char name[20];
int id;
sscanf("tabid=12544787844;123", "%[^=]=%d", name, &id);
printf(" name = %s id=%d\n", name ,id);
return 1;
}
我得到了以下结果:
name = tabid id = -340114044
sscanf的正则表达式有什么问题
答案 0 :(得分:5)
12544787844
不适合int
,因为它大于INT_MAX
(因此会出现溢出)。将long long
与%lld
格式字符串一起使用。
答案 1 :(得分:0)
发布的代码包含一些问题,如问题评论中所述。
以下提议的代码:
;123
永远不会输入现在,建议的代码
#include <stdio.h> // sscanf(), sprintf()
#include <stdlib.h> // exit(), EXIT_FAILURE
#define MAX_NAME_LEN 20
int main( void )
{
char name[ MAX_NAME_LEN +1 ];
long long int id;
char format[20];
sprintf( format, "%%%d[^=]=%%lld", MAX_NAME_LEN );
int status = sscanf("tabid=12544787844;123", format, name, &id);
if( status != 2 )
{
fprintf( stderr, "sscanf failed to extract the two fields\n" );
exit( EXIT_FAILURE );
}
// implied else, sscanf successful
printf(" name = %s id=%lld\n", name ,id);
// by convention:
// returning 0 indicates success,
// returning 1 indicates a failure
return 0;
}