我正在try 将C中的一维字符串数组复制到二维字符串数组中.

我可以用integer实现这一点

//Here is what I tried for integers.
        int main() 
    { 
        int arr[3][3];
        int arr2[9]={1,2,3,4,5,6,7,8,9}; 
    
        int i,j,k=0; 
    
        for(i=0; i<3;i++){
            for(j=0; j<3;i++){
              arr[j][i] = arr2[i];
                //rintf("%d\n",arr2[i]);
            }
            
        }
    
     for(i=0; i<3; i++) { 
        for(j=0; j<3; j++) 
          printf("%2d  ", arr[j][i]); 
        printf("\n"); 
      } 
    
        return 0; 
    } 

我将数据更改为char,并try 运行相同的代码,但出现了分段错误.

 #include<stdio.h> 
#include<string.h> 
 
int main() 
{ 
    char *d[3][3];  // Destination array 

    char *s[9]={"orange","apple","table","chair","cable","TV", "124","HI"};   // Source 1 Day array

    int i,j,k=0; 

    for(i=0; i<3;i++){
        for(j=0; j<3;i++){
            
          strcpy(d[j][i], s[i]);
           
        }
            }

 for(i=0; i<3; i++) { 
    for(j=0; j<3; j++) 
      printf("%s  ", d[j][i]); 
    printf("\n"); 
  } 

    return 0; 
} 

我做了一些调整,现在它打印了一些奇怪的字符串

#include<stdio.h> 
#include<string.h> 
 
int main() { 

    char d[3][3] ={0};  // Destination array 

    char s[9][8]={"orange","apple","table","chair","cable","TV", "124","HI"};   // Source 1 Day array

    int i,j,k=0; 
    
    for(i=0; i<3;i++){
        for(j=0; j<3;j++){

            d[j][i] = *s[i];
           
        }
            }
    
    for(i=0; i<3; i++) { 
        for(j=0; j<3; j++) 
            printf("%s  ", &d[j][i]); 
            printf("\n"); 
    } 

    return 0; 
} 

enter image description here

推荐答案

此for循环

    for(i=0; i<3;i++){
        for(j=0; j<3;i++){
          arr[j][i] = arr2[i];
            //rintf("%d\n",arr2[i]);
        }
        
    }

不正确.在内环中,使用了相同的元件arr2[i],其中i0变为2.

你需要写

    for(i=0; i<3;i++){
        for(j=0; j<3;i++){
          arr[j][i] = arr2[ 3 * i + j];
        }
    }

另一种写入循环的方法如下

    for ( i = 0; i < 9; i++ )
    {
        arr[i / 3][i % 3] = arr2[i];
    }

对于char*类型的指针数组,嵌套循环的外观类似

for(i=0; i<3;i++){
    for(j=0; j<3;i++){
        
      d[i][j] = s[ 3 * i + j];
       
    }
}

如果数组s声明为

char * s[9]={"orange","apple","table","chair","cable","TV", "124","HI"};   

要输出结果数组,需要编写

 for(i=0; i<3; i++) { 
    for(j=0; j<3; j++) 
      printf("%s  ", d[i][i]);
                     ^^^^^^^ 
    printf("\n"); 
  } 

至于你的上一个程序

#include<stdio.h> 
#include<string.h> 
 
int main( void ) 
{ 

    char d[3][3][8] ={0};  // Destination array 

    char s[9][8]={"orange","apple","table","chair","cable","TV", "124","HI"};   // Source 1 Day array

    for( size_t i = 0; i < 3; i++ )
    {
        for ( size_t j = 0; j < 3;j++ )
        {
            strcpy( d[j][i], s[3 * i + j] );
           
        }
    }
    
    for ( size_t i = 0; i < 3; i++ ) 
    { 
        for ( size_t j = 0; j < 3; j++ )
        { 
            printf( "%s  ", d[i][j] ); 
        }
        putchar( '\n' ); 
    } 

    return 0; 
} 

C++相关问答推荐

带双指针的2D数组

为什么我得到更多的256假阳性在PKZIP解密密钥验证?

为什么在此程序中必须使用Volatile关键字?

使用GOTO从多个嵌套循环C继续

自定义变参数函数的C预处置宏和警告 suppress ?

C在声明带有值的数组时,声明大小有用吗?

每个 struct 变量在C中都有自己的命名空间吗?

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

如何将字符**传递给需要常量字符指针的常量数组的函数

如何使用libgpio(d)为Raspberry Pi编译C程序?

C11/C17标准允许编译器清除复合文字内存吗?

将数组插入数组

将多项式从文件.txt加载到终端时出现问题

为什么这个分配做得不好呢?

为什么GCC-O1优化破解了这个代码,为了一个GameBoy高级只读存储器而修改了VRAM的循环?

是否有单独的缓冲区用于读写库调用?

memcmp 是否保证按顺序比较字节?

可以从指针数组中的值初始化指针吗?

如何在 C 中编辑 struct 体中的多个变量

Codewars Kata 掷骰子的不稳定行为