如何在c中从char*转换为char[]

如何在c中从char*转换为char[],c,type-conversion,C,Type Conversion,下面是一个代码示例 void something() { char c[100]; scanf("%s",c); char c2[100]=c; } 我的问题是当我做这个分配时,一个错误说我不能分配 char * "c" to char[] "c2"; 我怎样才能完成这个任务 您需要使用strcpy() 您必须使用strcpy()(或类似工具): 您不能使用=运算符分配数组。char[]在C中不是有效的值类型(它只是一个有效的声明类型),因此您实际上无法对char[]类型

下面是一个代码示例

void something()
{
   char c[100];
   scanf("%s",c);
   char c2[100]=c;
}
我的问题是当我做这个分配时,一个错误说我不能分配

char * "c"  to char[] "c2";
我怎样才能完成这个任务

您需要使用strcpy()


您必须使用strcpy()(或类似工具):


您不能使用
=
运算符分配数组。

char[]
在C中不是有效的值类型(它只是一个有效的声明类型),因此您实际上无法对
char[]
类型执行任何操作。你所能做的就是把它们转换成其他东西(通常是
char*
),然后用它做一些事情


因此,如果您想实际处理数组中的数据,则需要使用一些函数或操作,这些函数或操作接受
char*
并解除保护。您的示例的明显选择是strcpymemcpy

更好的做法是使用strncpy(c2,c,100)来避免缓冲区溢出,当然也可以使用scanf(“%99s”,c)之类的东西来限制数据输入

等等。。您是要将
c
中的数据分配给
c2
还是要将指针
c
分配给
c2
?可能是作业?我们真的需要这个标签吗?为什么不添加,但你永远不知道-,-这可能也有用?不,我们不需要标签-标签不应该用来表达意见-这就是注释的目的。我试图分配数据而不是指针,你的函数需要一个名称,而不仅仅是
void
返回类型。你说的是正确的,但是C给其他读者的一些建议是:1。小心使用strncpy,因为它不一定会NUL终止。(这里不是问题,因为
c
c2
具有相同数量的元素,但是,这也意味着简单的
strcpy
也不会是问题。)
fgets
比scanf更好。
char c2[100];
strcpy(c2, c);
...  
char c2[100];
strcpy(c2, c);