我是编程新手。你能告诉我为什么这段代码会导致分段错误吗?我应该如何声明变量 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);
此语句
:sscanf (f, "%[^.]%s",a ,b );
导致 SEG 错误事件,因为指针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