想通过 realloc 增加动态数组,但没有成功
Want to increase dynamic array by use realloc and not successful
void main()
{
int *ptr, size, i;
printf("size is:\n");
scanf("%d", &size);
ptr = (int*)malloc(size * sizeof(int));
if (ptr == NULL)
{
printf("Error");
return;
}
ptr = (int*)realloc(ptr, (size + 10) * sizeof(int));
for (i = 0; i <size+10; i++)
{
printf("number %d...\n", i);
scnaf("%d", &ptr[i]);
}
for (i = 0; i < size + 10; i++)
{
printf("%d ", ptr[i]);
}
free(ptr);
}
想创建一个动态数组,在内存中增加10个位置,并从用户那里吸收值。
例如,如果用户输入 5 作为尺寸,则总尺寸将为 size=5+10=15,如果用户随后输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
输出将是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
我得到的错误是:
Error LNK2019 unresolved external symbol _scnaf referenced in function _main realloc
Error LNK1120 1 unresolved externals realloc
你能帮我理解为什么会出现这个错误吗?
好吧,我同意,不会笑;)
这是 scanf()
,不是 scnaf()
:) :) :)
所以:
scanf("%d", &ptr[i]);
您的代码有两个问题导致错误。
- 你打错了 scnaf 而不是 scanf,就像@VillageTech 指出的那样。
- 您需要包含适当的标准库 headers:
scanf()
来自 <stdio.h>
and realloc()
from <stdlib.h>
。
如果你解决了这个问题,你的代码 compiles (GodBolt.org)。它的运行也基本符合您的预期。
另请注意,"size is:" 是一个非常含糊的消息,用户将对以后要做什么和期望什么感到困惑。
您的代码还存在其他问题,例如无法检查从 scanf()
返回的错误,或者假设 realloc()
成功 - 请参阅 @6502 的评论。
对于根据 C 标准的初学者,不带参数的函数 main 应声明为
int main( void )
其次有错别字。你写了 scnaf
而不是 scanf
.
而且你必须包括 headers
#include <stdio.h>
#include <stdlib.h>
这是一个演示程序。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
size_t size;
printf( "size is: " );
scanf( "%zu", &size );
int *ptr = malloc( size * sizeof( int ) );
if ( ptr == NULL )
{
puts( "Error" );
return EXIT_FAILURE;
}
int *tmp = realloc( ptr, ( size + 10 ) * sizeof( int ) );
if ( tmp != NULL )
{
size += 10;
ptr = tmp;
}
for ( size_t i = 0; i < size; i++ )
{
printf("number %zu => ", i );
scanf( "%d", ptr + i );
}
for ( size_t i = 0; i < size; i++ )
{
printf( "%d ", ptr[i] );
}
putchar( '\n' );
free( ptr );
return EXIT_SUCCESS;
}
它的输出可能看起来像
size is: 5
number 0 => 1
number 1 => 2
number 2 => 3
number 3 => 4
number 4 => 5
number 5 => 6
number 6 => 7
number 7 => 8
number 8 => 9
number 9 => 10
number 10 => 11
number 11 => 12
number 12 => 13
number 13 => 14
number 14 => 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
void main()
{
int *ptr, size, i;
printf("size is:\n");
scanf("%d", &size);
ptr = (int*)malloc(size * sizeof(int));
if (ptr == NULL)
{
printf("Error");
return;
}
ptr = (int*)realloc(ptr, (size + 10) * sizeof(int));
for (i = 0; i <size+10; i++)
{
printf("number %d...\n", i);
scnaf("%d", &ptr[i]);
}
for (i = 0; i < size + 10; i++)
{
printf("%d ", ptr[i]);
}
free(ptr);
}
想创建一个动态数组,在内存中增加10个位置,并从用户那里吸收值。 例如,如果用户输入 5 作为尺寸,则总尺寸将为 size=5+10=15,如果用户随后输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
输出将是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
我得到的错误是:
Error LNK2019 unresolved external symbol _scnaf referenced in function _main realloc
Error LNK1120 1 unresolved externals realloc
你能帮我理解为什么会出现这个错误吗?
好吧,我同意,不会笑;)
这是 scanf()
,不是 scnaf()
:) :) :)
所以:
scanf("%d", &ptr[i]);
您的代码有两个问题导致错误。
- 你打错了 scnaf 而不是 scanf,就像@VillageTech 指出的那样。
- 您需要包含适当的标准库 headers:
scanf()
来自<stdio.h>
andrealloc()
from<stdlib.h>
。
如果你解决了这个问题,你的代码 compiles (GodBolt.org)。它的运行也基本符合您的预期。
另请注意,"size is:" 是一个非常含糊的消息,用户将对以后要做什么和期望什么感到困惑。
您的代码还存在其他问题,例如无法检查从 scanf()
返回的错误,或者假设 realloc()
成功 - 请参阅 @6502 的评论。
对于根据 C 标准的初学者,不带参数的函数 main 应声明为
int main( void )
其次有错别字。你写了 scnaf
而不是 scanf
.
而且你必须包括 headers
#include <stdio.h>
#include <stdlib.h>
这是一个演示程序。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
size_t size;
printf( "size is: " );
scanf( "%zu", &size );
int *ptr = malloc( size * sizeof( int ) );
if ( ptr == NULL )
{
puts( "Error" );
return EXIT_FAILURE;
}
int *tmp = realloc( ptr, ( size + 10 ) * sizeof( int ) );
if ( tmp != NULL )
{
size += 10;
ptr = tmp;
}
for ( size_t i = 0; i < size; i++ )
{
printf("number %zu => ", i );
scanf( "%d", ptr + i );
}
for ( size_t i = 0; i < size; i++ )
{
printf( "%d ", ptr[i] );
}
putchar( '\n' );
free( ptr );
return EXIT_SUCCESS;
}
它的输出可能看起来像
size is: 5
number 0 => 1
number 1 => 2
number 2 => 3
number 3 => 4
number 4 => 5
number 5 => 6
number 6 => 7
number 7 => 8
number 8 => 9
number 9 => 10
number 10 => 11
number 11 => 12
number 12 => 13
number 13 => 14
number 14 => 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15