strcpy 从整数生成指针而不进行强制转换
Posted
技术标签:
【中文标题】strcpy 从整数生成指针而不进行强制转换【英文标题】:strcpy makes pointer from integer without a cast 【发布时间】:2022-01-05 11:59:32 【问题描述】:我试图在 char 数组中的特定位置插入一个字符 (char *peep),但每次尝试时,都会出现 strcpy 错误
当前代码
int main()
char *peep = malloc(256);
int pos;
char character, charToStr[2];
charToStr[1] = '\0';
printf("\nCharacter to insert: ");
scanf("%c", &character);
printf("Position to insert: ");
scanf("%d", &pos);
printf("\nPeep becomes\n%d:%c", pos,character);
charToStr[0] = character;
strcpy(peep[pos-1],charToStr);
printf("this is peep: \n%d:%c",pos,peep[pos-1]);
我尝试过使用 strncpy() 无济于事,并且诚实地尝试了许多其他方法
【问题讨论】:
strcpy 需要一个 char 指针作为它的第一个参数,你传递的是一个 char。 我希望传递的字符进入特定位置,如果没有第一个参数,我该怎么做?peep[pos-1] = character;
?虽然不确定您真正想要做什么,因为 peep
的其余部分仍将包含垃圾数据。
printf("this is peep: \n%d:%c",pos,peep[pos]);
以及为什么要在设置索引pos-1
时尝试在索引pos
处打印?整个代码真的没什么意义。
这是一个错字,感谢您的第一条评论
【参考方案1】:
看strcpy
函数的签名:
char *strcpy(char *dest, const char *src);
如您所见,此函数需要一个字符指针作为目标字符串。
然而,在您的代码中,您将一个普通字符传递给函数。这是因为您要取消引用索引 [pos-1]
处的字符串。
因此,您必须使用与号 (&
) 运算符来传递目标字符串的地址。因此,将您的 strcpy
调用更改为 strcpy(&peep[pos - 1], charToStr);
将使您的代码按预期工作。
【讨论】:
以上是关于strcpy 从整数生成指针而不进行强制转换的主要内容,如果未能解决你的问题,请参考以下文章
C指针和数组:[警告]赋值使指针从整数而不进行强制转换[关闭]
从 'void *' 对 'int' 的赋值使指针从没有强制转换的整数