【问题标题】:strcpy makes pointer from integer without a caststrcpy 从整数生成指针而不进行强制转换
【发布时间】: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 处打印?整个代码真的没什么意义。
  • 这是一个错字,感谢您的第一条评论

标签: arrays c char scanf strcpy


【解决方案1】:

strcpy函数的签名:

char *strcpy(char *dest, const char *src);

如您所见,此函数需要一个字符指针作为目标字符串。

然而,在您的代码中,您将一个普通字符传递给函数。这是因为您要取消引用索引 [pos-1] 处的字符串。

因此,您必须使用与号 (&) 运算符来传递目标字符串的地址。因此,将您的 strcpy 调用更改为 strcpy(&peep[pos - 1], charToStr); 将使您的代码按预期工作。

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 2021-01-19
    • 2023-02-08
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    相关资源
    最近更新 更多