如何在C语言中将char*转换为char[]

10

这是一个代码示例

void something()
{
   char c[100];
   scanf("%s",c);
   char c2[100]=c;
}

我的问题是,当我进行这个赋值操作时,会出现一个错误提示,说我不能赋值。

char * "c"  to char[] "c2";

我该如何完成这个任务?


1
等等..你是想将c内的数据赋值给c2,还是想将指针c赋值给c2 - Earlz
1
可能是作业?我们真的需要这个标签吗?为什么不加上“但你永远不知道,它也可能是工作”呢? - Daniel Daranas
2
不,我们不需要那个标签 - 标签不应该用于表达观点 - 这就是评论的作用。 - anon
我正在尝试分配数据而不是指针。 - Bassel Shawi
顺便提一下,你的函数需要一个名称,而不仅仅是void返回类型。 - David R Tribble
4个回答

19

你需要使用strcpy()(或类似函数):

...  
char c2[100];
strcpy(c2, c);

你不能使用 = 运算符来赋值数组。


6

您需要使用strcpy()函数。

char c2[100];
strcpy(c2, c);

4
更好的做法是使用strncpy(c2, c, 100)来避免缓冲区溢出,并且当然也需要限制数据输入,比如使用scanf("%99s", c);。

4
你说的是正确的,但是为了其他读者给出一些通用的C语言建议:
  1. 谨慎使用strncpy,因为它不一定会以NUL结尾。(在这里不是问题,因为cc2都有相同数量的元素,但是另一方面,这也意味着普通的strcpy也不会有问题。)
  2. fgetsscanf更好。http://c-faq.com/stdio/scanfprobs.html
- jamesdlin

3

char [] 不是 C 语言中的有效值类型(只是有效声明类型),因此你不能对 char [] 类型做任何操作。你可以将它们转换为其他类型(通常是 char *),然后再进行操作。

因此,如果你想实际处理数组中的数据,你需要使用一些函数或操作来获取指向 char * 的引用。在你的示例中,很明显可以选择使用 strcpymemcpy 函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接