C:试图在矩阵中反转10个字的顺序

时间:2014-09-09 23:39:13

标签: c string loops matrix parameters

我有一个10行20列的矩阵;所以我要求用户输入10个单词并将每个单词放在矩阵的一行中。在下一步中,我必须创建另一个矩阵(具有相同的比例),使得第一个矩阵的第一个字位于第二个矩阵的最后一个字,第一个矩阵的第二个字位于倒数第二个字的位置。第二个矩阵,等等。

但是我的代码遇到了一些问题:

#include <stdio.h>


 int main() {
    char str[10][20], str2[10][20];
    int i, j=9;

    /* filling the first matrix */
    for(i =0;i <10;i++){
        scanf("%s",str[i]);
    }

    /* copying to the second matrix in an inverted order */
    for (i=0;i<10;i++, j--){
        str2[i] = str[j];
    }


return 0;

 }

它返回以下错误:分配到类型&#39; char [20]&#39;类型&#39; char *&#39;时的不兼容类型

在线: &#34; str2 [i] = str [j]&#34;

想法?

2 个答案:

答案 0 :(得分:1)

如果你说

char str2[10][20];

然后str2是一个二维的字符数组,特别是200个字符排列成10行20个字符。

如果您以这种方式声明str2,则str2[i]相当于指向char的指针,但不是可指定指针。换句话说,该指针只能用于等号的右侧,而不能用于等号的左侧。

如果需要指针数组,则必须将数组声明为

char *str2[10];

在这种情况下,str2是一个指向char的指针的一维数组。具体来说,它是一个10个指针的数组(在32位机器上将占用40个字节的内存)。

因此有区别,char str2[10][20]占用200个字节的内存并且没有可指定的指针,而char *str2[10]占用40个字节的内存并且有10个可指定的指针。

答案 1 :(得分:0)

在c中你不能完整地写入(赋值)数组,就像评论员说为了这个目的你应该使用strcpy(memcpy,如果它不是字符串)。