将二维数组其中一行拷贝到一维数组中

在写这段代码的时候,我希望根据一个变量x,把二维数组的第x-1行拷贝到一个一维数组,单独写一段代码是能运行的,但是我在整段程序中拷贝就不能拷贝过去,帮忙看看这是为什么叭?

#include <stdio.h>
#include <string.h>
int main()
{
    int n;
    scanf("%d",&n);
    char tmp[8];
    char num[10][8]={
    {'1','2','3','4','5','6','\0'},
    {'3','5','\0'},
    {'1','3','4','6','7','\0'},
    {'1','3','5','6','7','\0'},
    {'2','3','5','7','\0'},
    {'1','2','5','6','7','\0'},
    {'2','4','5','6','7','\0'},
    {'1','3','5','\0'},
    {'1','2','3','4','5','6','7','\0'},
    {'1','2','3','5','6','7','\0'}
    } ;
    strcpy(tmp,num[n]);
    printf("%s\n",tmp);
    return 0;
}

#include <stdio.h>
#include <string.h>
int wid(int n);
void display(char *str,char tmp[],int m,int n,int col);
int main()
{
    char num[10][8]={
    {'1','2','3','4','5','6','\0'},
    {'3','5','\0'},
    {'1','3','4','6','7','\0'},
    {'1','3','5','6','7','\0'},
    {'2','3','5','7','\0'},
    {'1','2','5','6','7','\0'},
    {'2','4','5','6','7','\0'},
    {'1','3','5','\0'},
    {'1','2','3','4','5','6','7','\0'},
    {'1','2','3','5','6','7','\0'}
    } ;
    
    char str[7][27],tmp[8];
    int k,col=5,line=7;
    scanf("%d",&k);
    int digit,x; 
    for(int h=0;h<k;h++){
        memset(tmp,'\0',sizeof(tmp));
        scanf("%d",&digit);
        printf("%d:\n",digit);
        int widd=wid(digit);
             int flag=2;
             
             for(int i=0;i<(col*widd+2*(widd-1));i++) {
                 for(int j=0;j<line;j++){
                     str[i][j]=' ';
                 }
                
             }//赋值空格
        
             while(digit>0){
                    x=digit%10;
              strcpy(tmp,num[x]);
              printf("%s\n",tmp);
             display((char *)str,tmp,(col*(flag-1)+2*(flag-1)),(col*flag+2*(flag-1)),col);
             flag--;
             digit/=10;
             }
                      
            
         
//         for(int i=0;i<7;i++){
//             for(int j=0;j<col*widd+2*(widd-1);j++){
//                 printf("%c",str[i][j]);
//             }
//             printf("\n");
//         }//output
    }
    
    return 0;
}
int wid(int n)
{
    int flag=1;
    while(n>0){
        n/=10;
        if(n>0)
        flag++;
    }
    return flag;
}

void display(char *str,char tmp[],int m,int n,int col)
{
    int len=strlen(tmp)-1;
    for(int i=0;i<len;i++){
        switch(tmp[i]-48){
            case 1:
                for(int r=m;r<n;r++)
                *(str+0*col+r)='*';
                break;
            case 2:
                for(int r=0;r<4;r++)
                *(str+r*col+m)    ='*';
                break;
            case 3:
                for(int r=0;r<4;r++)
                *(str+r*col+n-1)='*';
                break;
            case 4:
                for(int r=3;r<7;r++)
                *(str+r*col+m)='*';
                break;
            case 5:
                for(int r=3;r<7;r++)
                    *(str+r*col+n-1)='*';
                break;
            case 6:
                for(int r=m;r<n;r++)
                *(str+6*col+r)='*';
                break;    
            case 7:
                for(int r=m;r<n;r++)
                *(str+3*col+r)='*';
                break;    
        }
    }
}






方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”


在你的代码中,你想要将二维数组num中的一行复制到一个一维字符数组tmp中。你可以使用strcpy()函数将一行拷贝到tmp数组中,但是在你的代码中,你正在尝试将整个num数组拷贝到一个单个字符数组tmp中。这不是你想要的,因为tmp数组只有8个元素,而num数组有10行每行有8个元素。

如果你只想将num数组中的第x行复制到tmp数组中,可以使用如下代码:

strcpy(tmp, num[x-1]);
在这里,我们使用x-1来访问num数组中的第x行,因为数组的索引是从0开始的,而不是从1开始的。通过这个修改,你的代码应该能够正确输出了。

因为您的程序中缺少了一个循环,用于打印str数组中的字符,没有循环,就无法将str数组中的内容正确输出。您可以添加如下的循环:

//输出 for(int i=0;i<7;i++){ for(int j=0;j<colwidd+2(widd-1);j++){ printf("%c",str[i][j]); } printf("\n"); }