我想将一个数字作为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 );
失败。
有什么问题?
答案 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])
。