这是我的代码,它在这里出现错误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;
}
答案 0 :(得分:9)
您在(pSrcString = malloc(7) == NULL)
中放错了括号。这样,您首先检查malloc(7)
对NULL
的结果(结果为假或0
),然后将其分配给pSrcString
。基本上是:
pSrcString = 0;
当然,这不会给你一个有效的记忆让strcpy
写东西。试试这个:
(pSrcString = malloc(7)) == NULL
同样适用于pDstString
。
除此之外,如果您只想拥有该字符串的副本,则可以使用strdup
函数。这为你分配内存并负责计算长度本身:
pSrcString = strdup("muppet");