【发布时间】:2020-09-29 21:34:57
【问题描述】:
当我尝试此代码时,我没有收到任何错误或警告或任何东西,它只是无法正常运行,我无法弄清楚为什么,它显示字符串混淆或缺少字符。
#include <stdio.h>
#include <stdlib.h>
int main() {
char arrr[53];
int i,
j;
for (i = 0; i <= 5; i++) {
printf("please enter a string \n");
scanf("%s", &arrr[i]);
}
for (j = 0; j <= 5; j++)
printf("%s \n", &arrr[j]);
return 0;
}
【问题讨论】:
-
您有 one 数组,并且您正在从 second 字符槽开始读取该数组,然后从第一个、第二个、第三个、第四个、第五个、第六个字符……请解释预期的行为
-
如果输入的字符少于 53 个,则此程序的行为与预期完全相同。也就是说,它确实运行正常。也许它的作用与你认为它应该做的事情之间存在脱节。
-
仅仅因为某些东西可以编译并不意味着代码会做你想做的事,或者它不会立即崩溃或表现不佳。例如,
&arrr[1]是有效的 C 代码并且可以编译,但它仅表示“从arr的第二个字节开始的缓冲区”,因此您每次都写入该缓冲区中完全相同的位置。 -
您想要一个数组数组或一个指针数组。注意第一个循环中
&arrr[1]的实例。这会将所有字符串读取到同一个位置,每个字符串都会破坏先前读取的字符串,跳过数组的第一个字符。这没有意义。 -
这里的意图是读取和存储从标准输入中获取的 5 个任意长度的 C 字符串吗?