2

これが私のコードで、ここで失敗しますstrcpy(pSrcString,"muppet");。実際には、strcpy を使用するたびに発生します。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{

char *pSrcString = NULL;
char *pDstString = NULL;

/* muppet == 6, so +1 for '\0' */
if ((pSrcString = malloc(7) == NULL))
{
    printf("pSrcString malloc error\n");
    return EXIT_FAILURE;
}

if ((pDstString = malloc(7) == NULL))
{
    printf("pDstString malloc error\n");
    return EXIT_FAILURE;
}

strcpy(pSrcString,"muppet");

strcpy(pDstString,pSrcString);

printf("pSrcString= %s\n",pSrcString);
printf("pDstString = %s\n",pDstString);
free(pSrcString);
free(pDstString);

return EXIT_SUCCESS;
}
4

1 に答える 1

9

の括弧の位置が間違っています(pSrcString = malloc(7) == NULL)malloc(7)そのようにして、最初にagainstの結果をチェックしNULL(これは false または であることが判明します0)、次にそれを に割り当てpSrcStringます。基本的:

pSrcString = 0;

もちろん、それではstrcpy書き込みを許可するための有効なメモリが得られるわけではありません。代わりにこれを試してください:

(pSrcString = malloc(7)) == NULL

についても同様ですpDstString

余談ですが、文字列のコピーが必要な場合は、関数を使用できますstrdup。これにより、メモリが割り当てられ、長さ自体の計算が処理されます。

pSrcString = strdup("muppet");
于 2012-09-30T09:38:58.950 に答える