c sscanf

时间:2017-10-29 19:17:19

标签: c variables format scanf

我是编程新手。你能告诉我为什么这段代码导致分段错误? 我应该如何声明变量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);

1 个答案:

答案 0 :(得分:0)

这句话:

sscanf (f, "%[^.]%s",a ,b );

导致seg fault事件,因为指针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