我有一个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;
想法?
答案 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,如果它不是字符串)。