如何增加每个循环中具有全局指针的数组大小
How to increase array size that has global pointer in each loop
我想将数组的大小设置为文本文件中的第一个整数(比如 5)。如果我将 size 后面的 5 个整数都保存到数组中,并且输入文件中仍然有行,我需要每次增加数组的大小并将该行(整数)存储在数组中。
我写了这段代码:
int *x;
int *sizeP;
int main(int argc, char *argv[]) {
int decision;
FILE* file = fopen( argv[1], "r" );
int size;
fscanf(file, "%d", &size);
sizeP = &size;
x=malloc(size*sizeof(int));
int p=0;
int num;
while(fscanf(file, "%d", &num) ) {
x[p] = num;
p++;
if (p >= size) {
puts("Enter 0 to continue or 1 to terminate");
scanf("%d", &decision);
break;
}
}
if (decision == 0){
while(fscanf(file, "%d", &num) ) {
size++;
x = (int*)realloc(x, size*sizeof(int));
x[p] = num;
p++;
}
free(x);
}
}
我不确定这段代码有什么问题?
提前致谢。
您检查fscanf
结果的方式不正确。当到达文件末尾时,fscanf
不是 return 0,而是 EOF
,它不为零(在大多数平台上定义为 -1
)。
while(fscanf(file, "%d", &num) )
一旦到达文件末尾,这将进入无限循环,因为EOF
不为零,其布尔值为真。
检查fscanf
结果的正确方法是将其与预期的字段数进行比较。由于您正在读取一个值,因此 return 应该像这样:
while(fscanf(file, "%d", &num) == 1) // <-- return value should be 1 on success
我想将数组的大小设置为文本文件中的第一个整数(比如 5)。如果我将 size 后面的 5 个整数都保存到数组中,并且输入文件中仍然有行,我需要每次增加数组的大小并将该行(整数)存储在数组中。 我写了这段代码:
int *x;
int *sizeP;
int main(int argc, char *argv[]) {
int decision;
FILE* file = fopen( argv[1], "r" );
int size;
fscanf(file, "%d", &size);
sizeP = &size;
x=malloc(size*sizeof(int));
int p=0;
int num;
while(fscanf(file, "%d", &num) ) {
x[p] = num;
p++;
if (p >= size) {
puts("Enter 0 to continue or 1 to terminate");
scanf("%d", &decision);
break;
}
}
if (decision == 0){
while(fscanf(file, "%d", &num) ) {
size++;
x = (int*)realloc(x, size*sizeof(int));
x[p] = num;
p++;
}
free(x);
}
}
我不确定这段代码有什么问题?
提前致谢。
您检查fscanf
结果的方式不正确。当到达文件末尾时,fscanf
不是 return 0,而是 EOF
,它不为零(在大多数平台上定义为 -1
)。
while(fscanf(file, "%d", &num) )
一旦到达文件末尾,这将进入无限循环,因为EOF
不为零,其布尔值为真。
检查fscanf
结果的正确方法是将其与预期的字段数进行比较。由于您正在读取一个值,因此 return 应该像这样:
while(fscanf(file, "%d", &num) == 1) // <-- return value should be 1 on success