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指针和数组:[警告]赋值使指针从整数而不进行强制转换[关闭]

gcc警告分配使指针从整数而不进行强制转换[重复]

从 'void *' 对 'int' 的赋值使指针从没有强制转换的整数

错误:赋值从没有强制转换的指针生成整数 [-Werror] str1 = (unsigned char*)s1

赋值从没有强制转换的指针生成整数 [-Wint-conversion