在if语句中调用方法会分解变量

时间:2016-10-25 13:33:40

标签: c if-statement scope

我有这样的代码

int i;
for(i=0; i<n ; i++)
{
    ....

    char* ref_error = "";
    if( isSeatAvailable(&tmp, movie_name, seat_number, &ref_error) == 0)
    {
        printf("available %s\n", seat_number);
    }
    else
    {
        logError(ref_error);
    }

    ....
}

如果isSeatAvailable返回0,它会完美运行,但会返回-1并且程序继续执行else语句,变量会崩溃:就像n变为4509408等。

事情是, 如果我重写这样的代码并在if语句之外调用isSeatAvailable方法,那就完美了!

int i;
for(i=0; i<n ; i++)
{
    ....

    int res = isSeatAvailable(&tmp, movie_name, seat_number, &ref_error);
    if( res == 0)
    {
        printf("available %s\n", seat_number);
    }
    else
    {
        logError(ref_error);
    }

    ....
}

这可能会导致什么问题?

这是我正在调用的方法

int isSeatAvailable(hall** halls,char* movie_name,char* seat_no, int ticket_count, char** ref_error)
{

   ....
   sprintf(*ref_error,"Seat %s is not defined at %s.",seat_no,tmp->hall_name);
   ....   
}

1 个答案:

答案 0 :(得分:3)

sprintf调用中的问题 。第一个参数ref_error来自:

char* ref_error = "";

现在sprintf尝试使用错误消息覆盖常量""。奇怪的事情会随之而来!

sprintf需要一个真正的缓冲区(足够大)来存储消息。不只是一个指针。