想通过 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]);

您的代码有两个问题导致错误。

  1. 你打错了 scnaf 而不是 scanf,就像@VillageTech 指出的那样。
  2. 您需要包含适当的标准库 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