c sscanf 中的分段错误



我是编程新手。你能告诉我为什么这段代码会导致分段错误吗?我应该如何声明变量 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 错误事件,因为指针ab指向只读内存。 建议更改

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

最新更新