Realloc循环失败

时间:2015-06-20 20:02:20

标签: c pointers

我想将一个数字作为int数组读取,但发生了一些奇怪的事情。

#include <stdlib.h>
#include <stdio.h>

int getNumber( int ** dst )
{
    int size = 0;
    int num = 0;

    scanf( "%c", &num );
    while( num != 10 )
    {
        if( (num < 48) || (num > 57) )
        {
            printf( "This is not a number.\r\n" );
            return -1;
        }
        size++;

        *dst = ( int * ) realloc( *dst, sizeof( int ) * size );
        *dst[ size - 1 ] = ( num - 48 );

        scanf( "%c", &num );
    }

    return size;
}

int main()
{
    int * number = NULL;
    int size = 0;

    size = getNumber( &number );

    return 0;
}

第一次迭代正常通过,但在第二次迭代*dst[ size - 1 ] = ( num - 48 );失败。 有什么问题?

2 个答案:

答案 0 :(得分:2)

哦,我找到了! 问题在于处理解除引用操作符的功能 方括号的优先级高于星号 因此,如果我修改该行:
*dst[ size - 1 ] = ( num - 48 );
像那样:
(*dst)[ size - 1 ] = ( num - 48 );
它会正常工作!

答案 1 :(得分:1)

因为[]的优先级高于* operator.so它的行为类似于String line = ""; String region = "", name = ""; BufferedReader file = new BufferedReader(new FileReader("Stores.txt")); line = file.readLine(); while (line != null) { if (!line.isEmpty()) { region = line.substring(0, 10); name = line.substring(10); System.out.println("" + region + name); } line = file.readLine(); } file.close();
 而不是*(dst[size-1])