【问题标题】:how to convert from char* to char[] in c如何在 c 中从 char* 转换为 char[]
【发布时间】:2011-01-05 15:46:39
【问题描述】:

这是一个代码示例

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

我的问题是当我做这个分配时,一个错误说我不能分配

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

我怎样才能完成这项任务?

【问题讨论】:

  • 等等等等..你是想把c里面的数据分配给c2还是把指针c分配给c2
  • 可能是家庭作业?我们真的需要这个标签吗?为什么不添加 but-you-never-know-,-it-may-be-be-work-as-well?
  • 不,我们不需要那个标签——标签不应该用来表达意见——这就是 cmets 的用途。
  • 我正在尝试分配数据而不是指针
  • 顺便说一句,您的函数需要一个名称,而不仅仅是 void 返回类型。

标签: c type-conversion


【解决方案1】:

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

【讨论】:

  • 您说的是正确的,但对其他读者的一些一般 C 建议: 1. 小心strncpy,因为它不一定会以 NUL 终止。 (这里不是问题,因为cc2 具有相同数量的元素,但是OTOH,这也意味着普通的strcpy 也不会成为问题。)2.fgets 会比@ 更好987654327@。 c-faq.com/stdio/scanfprobs.html
【解决方案2】:

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

因此,如果您想对数组中的数据进行实际操作,则需要使用一些函数或操作来获取 char * 并取消对它的引用。您的示例的明显选择是 strcpymemcpy

【讨论】:

    【解决方案3】:

    您必须使用strcpy()(或类似名称):

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

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

    【讨论】:

      【解决方案4】:

      你需要使用 strcpy()

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

      【讨论】:

        猜你喜欢
        • 2014-11-04
        • 1970-01-01
        • 2014-10-22
        • 2019-11-11
        • 2020-08-04
        • 1970-01-01
        • 2015-12-22
        • 2021-11-30
        • 2015-04-02
        相关资源
        最近更新 更多