我是编程新手。你能告诉我为什么这段代码导致分段错误? 我应该如何声明变量a和b以在sscanf中进一步使用它们?
string f = "123.45678";
string a = "aaa";
string b = "aaaaaa";
sscanf (f, "%[^.]%s",a ,b );
printf ("%s and %s %s \n", a, b, f);
答案 0 :(得分:0)
这句话:
sscanf (f, "%[^.]%s",a ,b );
导致seg fault事件,因为指针a
和b
指向只读存储器。建议改变
string a = "aaa";
string b = "aaaaaa";
通过以下方式成为堆栈中的项目:
string a[4] = "aaa";
string b[7] = "aaaaaa";
然后,为安全起见,改变:
sscanf (f, "%[^.]%s",a ,b );
类似于:
注意:目前还不清楚您是否希望.
成为b
的第一个字符。如果不希望.
成为第二个输入的一部分,请在输入格式说明符之间放置.
if( 2 != sscanf (f, "%3[^.].%6s", a ,b ) )
{
perror( "sscanf failed" );
exit( EXIT_FAILURE );
}
// implied else, sscanf successful