1

以下のコードをコンパイルすると、次のような警告が表示されます。

警告: 組み込み関数 memset の互換性のない暗黙の宣言 [デフォルトで有効]

void transform(int **a, int m, int n)
{
    int *row = malloc(m*sizeof(int));
    int *col = malloc(n*sizeof(int));
    memset(row, 0, sizeof(row));
    memset(col, 0, sizeof(col));
    [...]
4

1 に答える 1

7

疑問がある場合は、man ページを参照してください。

$ man memset

MEMSET(3)                BSD Library Functions Manual                MEMSET(3)

NAME
     memset -- fill a byte string with a byte value

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <string.h>
     ^^^^^^^^^^^^^^^^^^^

#include <string.h>これは、コンパイラが の関数プロトタイプを確認するために必要であることを示していますmemset

コードにバグがあることにも注意してください。変更する必要があります。

memset(row, 0, sizeof(row));
memset(col, 0, sizeof(col));

に:

memset(row, 0, m * sizeof(*m));
memset(col, 0, n * sizeof(*n));
于 2012-10-19T00:55:10.877 に答える