【问题标题】:How to copy string from a single dimensional array to 2d array in c?如何将字符串从一维数组复制到c中的二维数组?
【发布时间】:2019-11-14 10:59:12
【问题描述】:

我正在尝试将相同的字符从一维 char 数组复制到二维数组的每一行,但我无法输出。

预期输出:

            abcd  
            abcd  
            abcd  
            abcd   

我得到的输出:

process returned -1073741819(0xC0000005) execution time : 4.583s  
press any key to continue  

代码如下:

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

void main()
{
    int i,j;
    char v[4]={'a','b','c','d'};
    char answers[10][10];
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            strcpy(answers[i][j],v[i]);
        }
    }
    for(i=0;i<4;i++){
        printf("\n%s",answers[i]);
    }
    getch();
}

【问题讨论】:

  • &lt;conio.h&gt;?你在哪个时代?
  • 我的大学还在1995年,:D
  • 你的调试器告诉你什么?
  • 在担心二维数组之前,您需要研究字符串和一维数组是如何工作的。还要注意编译器警告。
  • 我的编译器只是给我警告“缺少初始化器周围的大括号”,即使大括号被正确放置。我发现它只是 gcc 中的一个错误。link。我正在使用代码块ide 16.01 和 gcc 8.2.0,我需要更新什么吗?

标签: c arrays string


【解决方案1】:

C 中的字符串以空值结尾。试试这个:

char v[5] = { 'a','b','c','d', '\0' };

这里也是这个

for(i=0;i<4;i++){
    for(j=0;j<4;j++){
        strcpy(answers[i][j],v[i]);
    }
}

不起作用,因为您要尝试复制字符,但此函数需要字符串。您的编译器应该发出有关不兼容类型的警告。用这个替换这个嵌套循环:

for (i = 0; i < 4; i++) {
    strcpy(answers[i], v);
}

【讨论】:

    【解决方案2】:

    你正在使用

    strcpy(answers[i][j],v[i]);
    

    但是,answers[i][j]v[i] 都不是 字符串(或者,指向 char 数组的指针)。您实际上是在访问超出限制的内存,从而调用未定义的行为。

    解决方案:您可以简单地使用赋值运算符=,将每个元素一个一个地复制。

    也就是说,如果您想将answers[i] 用作字符串,(如printf("\n%s",answers[i]); 中所示),您需要确保它以空值结尾。实现此目的的一种快速方法是在定义时将数组初始化为0

    类似

     char answers[10][10] = {0};  // ensure the elements are zero-initialized
    

    【讨论】:

    • 你能提供一个解决方案来获得预期的输出吗?
    猜你喜欢
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2021-07-02
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多