在C中使用strcpy()函数时遇到问题

在C中使用strcpy()函数时遇到问题,c,string,pointers,C,String,Pointers,我在使用strcpy()函数时遇到问题。输出仅显示前4个字母。我的代码怎么了 #include <stdio.h> #include <string.h> int main() { char *ch,c[50]; strcpy(&ch, "lkiop"); strcpy(c, &ch); printf("%s", c); return 0; } #包括 #包括 int main() { char*ch,c[50]

我在使用strcpy()函数时遇到问题。输出仅显示前4个字母。我的代码怎么了

#include <stdio.h>
#include <string.h>

int main()
{
    char *ch,c[50];
    strcpy(&ch, "lkiop");
    strcpy(c, &ch);
    printf("%s", c);
    return 0;
}
#包括
#包括
int main()
{
char*ch,c[50];
strcpy(简称“lkiop”);
strcpy(c和ch);
printf(“%s”,c);
返回0;
}
  • ch
    指针未指向有效内存。尝试取消引用这样的指针将调用未定义的行为
  • &ch
    的类型是
    char**
    strcpy()
    的第一个参数应该是
    char*
    。您需要将代码更改为

    char ch[50];
    char c[50];
    
    strcpy(ch, "lkiop");
    strcpy(c, ch);
    
    而且,编译器警告也不能被忽略,除非你真的故意做了一些会触发警告的事情,在这种情况下,你可以让你的编译器忽略那个特定的警告


  • 你的编译器怎么说?您应该会收到大量错误消息。但是,c[50]明确规定,它最多可以容纳49个字符(不带null终止符)。如果我不知道绳子会有多长呢?你知道,如果我把一个字符串作为输入,不知道它会有多长,我应该如何处理这种情况?当然,解决方案不是试图将它存储在一个未初始化的指针中,你知道关于
    malloc()
    ?请原谅我的知识不足,因为我在这方面是新手。有没有什么方法可以只使用指针和数组而不使用malloc()?谢谢。你认为展示前四个字母的原因是什么?