我有四个scanf字符串的给定输入,我想保存在多维数组中。我不知道我是否正确保存了字符串,但我不能简单地打印整个数组或其中的某些字符。
char getr[4][4];
for (z=0; z<4; z++){
scanf(" %99s", &getr[z]);
}
for (s=0; s<4; s++) {
printf("%s\n",getr[s]);
}
输入: A B C D EFGH IJKL MNOP
输出: abcdefghijklmnop efghijklmnop ijklmnop MNOP
如果我只想打印第一行的第二行或第四个字符怎么办?有人知道吗?
答案 0 :(得分:0)
首先,改变如下:
scanf(" %99s", getr[z]); //getr[z] is the address to take the 4 characters string
打印出第二行:
printf("%s\n", getr[1]);
打印出第一行的第四个字符:
printf("%c\n", getr[0][3]); // %c is used here because just print one character.
答案 1 :(得分:0)
要存储4-char字符串,就像您的示例输入一样,您需要使用5-char数组为终止空字符留出空间:
char getr[4][5];
您的scanf()
格式字符串也应该反映您拥有的空间量; %99s
最多可读取100个字节(99个字符加上空值),而您只有5个(包括上述更改后的空值)。此外,&getr[z]
和getr[z]
碰巧提供相同的地址,但指针的类型也不同 - 但getr[z]
给出的char *
在这种情况下是合适的。所以......
scanf(" %4s", getr[z]);
这些更改将使字符串不会一起运行,因此可以通过getr[0]
以getr[3]
访问单个字符串。要在字符串中打印单个字符,请添加一组索引括号,并使用打印字符而不是字符串的函数:
fputc(getr[0][2],stdout); /* print 3rd char in 1st string */
printf("%c",getr[1][3]); /* print 4th char of 2nd string */
你得到所有字符串连接的原因是因为早期字符串中的null char溢出到下一个char数组中,并被你读取的下一个字符串的第一个字符覆盖。最后一个字符串的null会溢出你的整个2D数组,进入内存中的下一个(这很糟糕)。