此问题在此处已有答案:
Proper way to copy C strings(4个答案)
2天前关闭.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *cp;
cp = (char *)malloc(10 * sizeof(char));
cp="kerem";
//strcpy(cp, "kerem");
printf("%s",cp);
cp=(char *)realloc(cp,30 * sizeof(char));
//strcpy(cp, "kerem demir Aziz Kerem Demir");
cp= "kerem demir Aziz Kerem Demir";
printf("%s",cp);
//free(cp);
return 0;
}
在使用strcpy函数时,我可以复制指针字符串而没有任何问题,但是;当我使用char * 执行此操作时,我得到以下错误:realloc():无效指针
2条答案
按热度按时间y0u0uwnf1#
这段代码有几个问题:
cp="kerem";
将数据复制到cp
所指向的位置,而实际上它只是使cp
指向字符串文字“kerem”的位置cp
的新大小也将是20,这不足以存储您试图复制的值(即使假设您使用strcpy而不是=
)。fjnneemd2#
关键的问题是台词:
C语言中的字符串字面量或多或少(*)是这样工作的:
现在,
cp
指向一个内存,该内存 * 不是 * 通过malloc
/realloc
从动态分配中产生的,并且在不调用Undefined Behavior的情况下,它不能成为realloc
的参数。这就是为什么需要
strcpy
,因为它将内存的内容复制到cp
所指向的另一个内存中,指针cp
的值不变。(*)不能修改字符串文字,而且具有相同内容的文字 * 可以 * 共享存储。