【问题标题】:Copy Array of strings in C error复制C错误中的字符串数组
【发布时间】:2012-10-29 01:42:01
【问题描述】:

我想将大约 20 个国家/地区名称保存到一个字符串中,然后将它们复制到另一个字符串中,但它总是给我一些错误,有人可以帮助我吗?

这是我的代码:

char array1[30][30], array2[30][30];

这就是我将它们放入第一个数组的方式:

fscanf(fr, "%s", array1[i]);

这一切都有效,但当我想做时:

array2[0] = array1[0];

我得到错误:

incompatible types when assigning to type 'char[30]' from type 'char *'

当我使用时:

strcpy(array2[pom2], array1[i]);

它没有显示错误,但不复制也不打印出来。

【问题讨论】:

    标签: c arrays string char strcpy


    【解决方案1】:

    你试过逐个字符传递吗?

    for( i = 0; i < 30; i++ ){
       for( j = 0; j < 30; j++ ){
          targetArray[ i ][ j ] = sourceArray[ i ][ j ];
    
          /* End of the string, stop copying */
          if ( sourceArray[ i ][ j ] == '\0' ){
             break;
          }
       }
    }
    

    【讨论】:

    • 这是快速而不是深入思考的解决方案
    • 您将使用此解决方案复制无用的字符。而且,这通常比使用 strcpymemcpy 慢,后者通常由编译器优化。
    • @Fabien,这是正确的,这就是为什么我说“快速而不是思考解决方案”
    • 如果我使用它,我会得到大约 20-30 个奇怪的字符,例如 &@-:-/ 等等,看起来我从错误的来源复制,但后来我尝试打印 array1[0]它打印:克罗地亚然后我尝试做for (i = 0; i &lt; 30; i++){array2[0][i] = array1[0][i] } 然后当我打印 array1[o] 时我得到克罗地亚,当我打印 array2[o] 时我再次得到这 30 个奇怪的字符
    • 它不知何故对我不起作用,但删除了整个项目文件夹,只是将代码复制到新项目并再次尝试 strcpy,现在它工作了。非常感谢您对我的帮助和如此快速的帮助,非常感谢!
    【解决方案2】:

    对于第一个错误:您不能将一个数组复制到另一个数组中。您可以只复制 salar 值(在您的情况下为字符)。

    如果你想将一个字符串复制到另一个字符串中,你确实必须使用strcpy函数(或近亲,如strncpy。你应该给我们完整的代码,以便我们可以看到问题出在哪里致电strcpy

    【讨论】:

    • 当我使用 strcpy 时,它会打印出这样的内容:!"#$%&'*+,-./
    • 您检查fr 确实有效吗?即,您在打开它时是否检查过一切正常?如果出现问题,frNULL,然后任何事情都可能发生。
    • 是的,我检查了它是否不是 NULL 还检查了 array1[0] 并打印它打印:克罗地亚
    猜你喜欢
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多